[TCPIP] Properly handle listening sockets
authorPierre Schweitzer <pierre@reactos.org>
Sun, 18 Nov 2018 19:51:54 +0000 (20:51 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 18 Nov 2018 19:51:54 +0000 (20:51 +0100)
We first check if a socket is listening before
checking whether it has connections. This allows
properly returning listening address.
Furthermore, if it's listening, properly return
status so that it displays nice in netstat.

Result: https://twitter.com/HeisSpiter/status/1064245622323200000 :-)

drivers/network/tcpip/tcpip/ninfo.c

index f57e183..54e9be4 100644 (file)
@@ -188,12 +188,16 @@ TDI_STATUS InfoTdiQueryGetConnectionTcpTable(PADDRESS_FILE AddrFile,
     TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
 
     EndPoint = NULL;
-    if (AddrFile->Connection != NULL)
-        EndPoint = AddrFile->Connection->AddressFile;
-    else if (AddrFile->Listener != NULL)
+    TcpRow.State = 0; /* FIXME */
+
+    if (AddrFile->Listener != NULL)
+    {
         EndPoint = AddrFile->Listener->AddressFile;
+        TcpRow.State = MIB_TCP_STATE_LISTEN;
+    }
+    else if (AddrFile->Connection != NULL)
+        EndPoint = AddrFile->Connection->AddressFile;
 
-    TcpRow.State = 0; /* FIXME */
     TcpRow.dwLocalAddr = AddrFile->Address.Address.IPv4Address;
     TcpRow.dwLocalPort = AddrFile->Port;