]> git.proxmox.com Git - qemu.git/blobdiff - slirp/tcp_subr.c
Merge branch 'eflags3' of git://github.com/rth7680/qemu
[qemu.git] / slirp / tcp_subr.c
index 0a545c41e767b30ddb9e1ff04c9828b6186a762a..1542e4361920ec1773c966cadf4f193ea3578783 100644 (file)
@@ -114,9 +114,9 @@ tcp_respond(struct tcpcb *tp, struct tcpiphdr *ti, struct mbuf *m,
        int win = 0;
 
        DEBUG_CALL("tcp_respond");
-       DEBUG_ARG("tp = %lx", (long)tp);
-       DEBUG_ARG("ti = %lx", (long)ti);
-       DEBUG_ARG("m = %lx", (long)m);
+       DEBUG_ARG("tp = %p", tp);
+       DEBUG_ARG("ti = %p", ti);
+       DEBUG_ARG("m = %p", m);
        DEBUG_ARG("ack = %u", ack);
        DEBUG_ARG("seq = %u", seq);
        DEBUG_ARG("flags = %x", flags);
@@ -124,7 +124,7 @@ tcp_respond(struct tcpcb *tp, struct tcpiphdr *ti, struct mbuf *m,
        if (tp)
                win = sbspace(&tp->t_socket->so_rcv);
         if (m == NULL) {
-               if ((m = m_get(tp->t_socket->slirp)) == NULL)
+               if (!tp || (m = m_get(tp->t_socket->slirp)) == NULL)
                        return;
                tlen = 0;
                m->m_data += IF_MAXLINKHDR;
@@ -435,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) {