]> git.proxmox.com Git - qemu.git/blobdiff - slirp/tcp_subr.c
Documentation: Warn against qemu-img on active image
[qemu.git] / slirp / tcp_subr.c
index 61079b1b2d9121567256d4162b5448e906005d36..025b3743678b80fe72891e01ca8f0d61551cf7e4 100644 (file)
@@ -55,6 +55,13 @@ tcp_init(Slirp *slirp)
     slirp->tcp_last_so = &slirp->tcb;
 }
 
+void tcp_cleanup(Slirp *slirp)
+{
+    while (slirp->tcb.so_next != &slirp->tcb) {
+        tcp_close(sototcpcb(slirp->tcb.so_next));
+    }
+}
+
 /*
  * Create template to be used to send tcp packets on a connection.
  * Call after host entry created, fills
@@ -329,7 +336,7 @@ int tcp_fconnect(struct socket *so)
     int opt, s=so->s;
     struct sockaddr_in addr;
 
-    fd_nonblock(s);
+    socket_set_nonblock(s);
     opt = 1;
     setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(opt ));
     opt = 1;
@@ -417,7 +424,7 @@ tcp_connect(struct socket *inso)
                tcp_close(sototcpcb(so)); /* This will sofree() as well */
                return;
        }
-       fd_nonblock(s);
+       socket_set_nonblock(s);
        opt = 1;
        setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));
        opt = 1;
@@ -428,8 +435,11 @@ tcp_connect(struct socket *inso)
        so->so_fport = addr.sin_port;
        so->so_faddr = addr.sin_addr;
        /* Translate connections from localhost to the real hostname */
-       if (so->so_faddr.s_addr == 0 || so->so_faddr.s_addr == loopback_addr.s_addr)
-          so->so_faddr = slirp->vhost_addr;
+        if (so->so_faddr.s_addr == 0 ||
+            (so->so_faddr.s_addr & loopback_mask) ==
+            (loopback_addr.s_addr & loopback_mask)) {
+            so->so_faddr = slirp->vhost_addr;
+        }
 
        /* Close the accept() socket, set right state */
        if (inso->so_state & SS_FACCEPTONCE) {
@@ -902,7 +912,7 @@ int tcp_ctl(struct socket *so)
                     return 1;
                 }
                 do_pty = ex_ptr->ex_pty;
-                DEBUG_MISC((dfd, " executing %s \n",ex_ptr->ex_exec));
+                DEBUG_MISC((dfd, " executing %s\n", ex_ptr->ex_exec));
                 return fork_exec(so, ex_ptr->ex_exec, do_pty);
             }
         }