Index: /trunk/src/VBox/Devices/Network/slirp/slirp.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/slirp.c	(revision 38067)
+++ /trunk/src/VBox/Devices/Network/slirp/slirp.c	(revision 38068)
@@ -967,5 +967,10 @@
          */
         /* @todo: vvl - check which predicat here will be more useful here in rerm of new sbufs. */
-        if (CONN_CANFRCV(so) && (SBUF_LEN(&so->so_snd) < (SBUF_SIZE(&so->so_snd)/2)))
+        if (   CONN_CANFRCV(so)
+            && (SBUF_LEN(&so->so_snd) < (SBUF_SIZE(&so->so_snd)/2))
+#ifdef NAT_CONNECT_EXPERIMENT
+            && !(so->so_state & SS_ISFCONNECTING)
+#endif
+        )
         {
             STAM_COUNTER_INC(&pData->StatTCPHot);
@@ -1167,7 +1172,7 @@
 # ifdef RT_OS_WINDOWS
             /**
-             * In some cases FD_CONNECT comes with FD_OOB, that confuse tcp processing.
+             * In some cases FD_CLOSE comes with FD_OOB, that confuse tcp processing.
              */
-            && !WIN_CHECK_FD_SET(so, NetworkEvents, connectfds)
+            && !WIN_CHECK_FD_SET(so, NetworkEvents, closefds)
 # endif
 #endif
@@ -1183,6 +1188,14 @@
                  || WIN_CHECK_FD_SET(so, NetworkEvents, acceptds))
         {
+
 #ifdef DEBUG_vvl
             Assert(((so->so_state & SS_ISFCONNECTING) == 0));
+#endif
+#ifdef NAT_CONNECT_EXPERIMENT
+            if (WIN_CHECK_FD_SET(so, NetworkEvents, connectfds))
+            {
+                TCP_ENGAGE_EVENT2(so, readfds, acceptds);
+                goto dont_read_now;
+            }
 #endif
             /*
@@ -1200,4 +1213,7 @@
             if (RT_LIKELY(ret > 0))
                 TCP_OUTPUT(pData, sototcpcb(so));
+#ifdef NAT_CONNECT_EXPERIMENT
+dont_read_now:;
+#endif
         }
 
@@ -1592,4 +1608,6 @@
     size_t mlen = 0;
     STAM_PROFILE_START(&pData->StatIF_encap, a);
+    LogFlowFunc(("ENTER: pData:%p, eth_proto:%RX16, m:%p, flags:%d\n",
+                pData, eth_proto, m, flags));
 
     M_ASSERTPKTHDR(m);
@@ -1632,4 +1650,5 @@
     mbuf = mtod(m, uint8_t *);
     eh->h_proto = RT_H2N_U16(eth_proto);
+    LogFunc(("eh(dst:%RTmac, src:%RTmac)\n", eh->h_dest, eh->h_source));
     if (flags & ETH_ENCAP_URG)
         slirp_urg_output(pData->pvUser, m, mbuf, mlen);
@@ -1638,4 +1657,5 @@
 done:
     STAM_PROFILE_STOP(&pData->StatIF_encap, a);
+    LogFlowFuncLeave();
 }
 
