Index: /trunk/src/VBox/Devices/Network/slirp/libalias/alias_db.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/libalias/alias_db.c	(revision 41340)
+++ /trunk/src/VBox/Devices/Network/slirp/libalias/alias_db.c	(revision 41341)
@@ -1018,4 +1018,5 @@
         struct libalias *la = lnk->la;
         la->sockCount--;
+        lnk->pSo->fShouldBeRemoved = 1;
         lnk->pSo = NULL;
     }
@@ -1061,5 +1062,5 @@
         close(lnk->sockfd);
     }
-# else
+# else /* VBOX */
     if (lnk->pSo)
     {
@@ -1071,6 +1072,9 @@
          * narrow-minded and just do sofree here
          */
+#if 0
         sofree(la->pData, lnk->pSo);
-        lnk->pSo = NULL;
+#else
+	slirpDeleteLinkSocket(lnk);
+#endif
     }
 # endif
Index: /trunk/src/VBox/Devices/Network/slirp/slirp.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/slirp.c	(revision 41340)
+++ /trunk/src/VBox/Devices/Network/slirp/slirp.c	(revision 41341)
@@ -1252,4 +1252,8 @@
         Assert((!so->so_cloneOf));
 #endif
+        Assert(!so->fUnderPolling);
+        so->fUnderPolling = 1;
+        if (slirpVerifyAndFreeSocket(pData, so))
+            CONTINUE(tcp);
         /*
          * FD_ISSET is meaningless on these sockets
@@ -1257,8 +1261,9 @@
          */
         if (so->so_state & SS_NOFDREF || so->s == -1)
+        {
+            so->fUnderPolling = 0;
             CONTINUE(tcp);
-
-        Assert(!so->fUnderPolling);
-        so->fUnderPolling = 1;
+        }
+
         POLL_TCP_EVENTS(rc, error, so, &NetworkEvents);
 
@@ -1491,4 +1496,11 @@
             CONTINUE_NO_UNLOCK(udp);
 #endif
+#if 0
+        so->fUnderPolling = 1;
+        if(slirpVerifyAndFreeSocket(pData, so));
+            CONTINUE(udp);
+        so->fUnderPolling = 0;
+#endif
+
         POLL_UDP_EVENTS(rc, error, so, &NetworkEvents);
 
