Index: /trunk/src/VBox/Devices/Network/slirp/slirp.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/slirp.c	(revision 38042)
+++ /trunk/src/VBox/Devices/Network/slirp/slirp.c	(revision 38043)
@@ -183,4 +183,6 @@
 # define closefds_win     FD_CLOSE
 # define closefds_win_bit FD_CLOSE_BIT
+# define connectfds_win     FD_CONNECT
+# define connectfds_win_bit FD_CONNECT_BIT
 
 # define closefds_win FD_CLOSE
@@ -200,4 +202,10 @@
 #define TCP_ENGAGE_EVENT2(so, fdset1, fdset2) \
     DO_ENGAGE_EVENT2((so), fdset1, fdset2, tcp)
+
+#ifdef RT_OS_WINDOWS
+# define WIN_TCP_ENGAGE_EVENT2(so, fdset, fdset2) TCP_ENGAGE_EVENT2(so, fdset1, fdset2)
+#else
+# define WIN_TCP_ENGAGE_EVENT2(so, fdset, fdset2) do{}while(0)
+#endif
 
 #define UDP_ENGAGE_EVENT(so, fdset) \
@@ -933,5 +941,13 @@
             Log2(("connecting %R[natsock] engaged\n",so));
             STAM_COUNTER_INC(&pData->StatTCPHot);
+#ifndef NAT_CONNECT_EXPERIMENT
             TCP_ENGAGE_EVENT1(so, writefds);
+#else
+# ifdef RT_OS_WINDOWS
+            WIN_TCP_ENGAGE_EVENT2(so, writefds, connectfds);
+# else
+            TCP_ENGAGE_EVENT1(so, writefds);
+# endif
+#endif
         }
 
@@ -1159,4 +1175,7 @@
                  || WIN_CHECK_FD_SET(so, NetworkEvents, acceptds))
         {
+#ifdef DEBUG_vvl
+            Assert(((so->so_state & SS_ISFCONNECTING) == 0));
+#endif
             /*
              * Check for incoming connections
@@ -1210,5 +1229,9 @@
          * Check sockets for writing
          */
-        if (CHECK_FD_SET(so, NetworkEvents, writefds))
+        if (    CHECK_FD_SET(so, NetworkEvents, writefds)
+#if defined(NAT_CONNECT_EXPERIMENT)
+            ||  WIN_CHECK_FD_SET(so, NetworkEvents, connectfds)
+#endif
+            )
         {
             /*
