https://gitlab.freedesktop.org/slirp/libslirp/-/commit/3e6e68e779c9051590250a87214dabf91e70949a

Index: src/tcp_subr.c
--- src/tcp_subr.c.orig
+++ src/tcp_subr.c
@@ -992,22 +992,20 @@ int tcp_ctl(struct socket *so)
     DEBUG_ARG("so = %p", so);
 
     /* TODO: IPv6 */
-    if (so->so_faddr.s_addr != slirp->vhost_addr.s_addr) {
-        /* Check if it's pty_exec */
-        for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
-            if (ex_ptr->ex_fport == so->so_fport &&
-                so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
-                if (ex_ptr->write_cb) {
-                    so->s = SLIRP_INVALID_SOCKET;
-                    so->guestfwd = ex_ptr;
-                    return 1;
-                }
-                DEBUG_MISC(" executing %s", ex_ptr->ex_exec);
-                if (ex_ptr->ex_unix)
-                    return open_unix(so, ex_ptr->ex_unix);
-                else
-                    return fork_exec(so, ex_ptr->ex_exec);
+    /* Check if it's pty_exec */
+    for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
+        if (ex_ptr->ex_fport == so->so_fport &&
+            so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
+            if (ex_ptr->write_cb) {
+                so->s = SLIRP_INVALID_SOCKET;
+                so->guestfwd = ex_ptr;
+                return 1;
             }
+            DEBUG_MISC(" executing %s", ex_ptr->ex_exec);
+            if (ex_ptr->ex_unix)
+                return open_unix(so, ex_ptr->ex_unix);
+            else
+                return fork_exec(so, ex_ptr->ex_exec);
         }
     }
     sb->sb_cc = slirp_fmt(sb->sb_wptr, sb->sb_datalen - (sb->sb_wptr - sb->sb_data),
