Index: /trunk/src/VBox/Devices/Network/slirp/debug.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/debug.c	(revision 51328)
+++ /trunk/src/VBox/Devices/Network/slirp/debug.c	(revision 51329)
@@ -284,9 +284,7 @@
 {
     struct socket *so = (struct socket*)pvValue;
-    struct sockaddr addr;
-    struct sockaddr_in *in_addr;
-    socklen_t socklen = sizeof(struct sockaddr);
     PNATState pData = (PNATState)pvUser;
-    int status = 0;
+    size_t cb = 0;
+
     NOREF(cchWidth);
     NOREF(cchPrecision);
@@ -295,4 +293,5 @@
 
     AssertReturn(strcmp(pszType, "natsock") == 0, 0);
+
     if (so == NULL)
         return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
@@ -302,19 +301,11 @@
                 "socket(%d)", so->s);
 
-    status = getsockname(so->s, &addr, &socklen);
-    if(status != 0 || addr.sa_family != AF_INET)
-    {
-        return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
-                "socket(%d) is invalid(%s)", so->s, strerror(errno));
-    }
-
-    in_addr = (struct sockaddr_in *)&addr;
-    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "socket %d:(proto:%u) exp. in %d "
-            "state=%R[natsockstate] "
-            "fUnderPolling:%RTbool "
-            "fShouldBeRemoved:%RTbool "
-            "f_(addr:port)=%RTnaipv4:%d "
-            "l_(addr:port)=%RTnaipv4:%d "
-            "name=%RTnaipv4:%d",
+    cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
+            "socket %d:(proto:%u) exp. in %d "
+            " state=%R[natsockstate]"
+            " fUnderPolling:%RTbool"
+            " fShouldBeRemoved:%RTbool"
+            " f_(addr:port)=%RTnaipv4:%d"
+            " l_(addr:port)=%RTnaipv4:%d",
             so->s, so->so_type,
             so->so_expire ? so->so_expire - curtime : 0,
@@ -325,7 +316,36 @@
             RT_N2H_U16(so->so_fport),
             so->so_laddr.s_addr,
-            RT_N2H_U16(so->so_lport),
-            in_addr->sin_addr.s_addr,
-            RT_N2H_U16(in_addr->sin_port));
+            RT_N2H_U16(so->so_lport));
+
+    if (so->s != -1)
+    {
+        struct sockaddr addr;
+        socklen_t socklen;
+        int status;
+
+        socklen = sizeof(addr);
+        status = getsockname(so->s, &addr, &socklen);
+
+        if (status != 0)
+        {
+            cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
+                    " (getsockname failed)");
+        }
+        else if (addr.sa_family != AF_INET)
+        {
+            cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
+                    " (unexpected address family %d)",
+                    addr.sa_family);
+        }
+        else
+        {
+            struct sockaddr_in *in_addr = (struct sockaddr_in *)&addr;
+            cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
+                    " name=%RTnaipv4:%d",
+                    in_addr->sin_addr.s_addr,
+                    RT_N2H_U16(in_addr->sin_port));
+        }
+    }
+    return cb;
 }
 
