[TCPIP]
authorCameron Gutman <aicommander@gmail.com>
Sun, 3 Jul 2011 02:13:57 +0000 (02:13 +0000)
committerCameron Gutman <aicommander@gmail.com>
Sun, 3 Jul 2011 02:13:57 +0000 (02:13 +0000)
- Only wait to bind to a port if INADDR_ANY is specified
- Fixes EADDRNOTAVAIL when running Firefox and ws2_32_winetest sock (which now gets further but still doesn't complete)

svn path=/trunk/; revision=52511

reactos/drivers/network/tcpip/tcpip/fileobjs.c

index 6d9b0b5..f7ead95 100644 (file)
@@ -295,9 +295,21 @@ NTSTATUS FileOpenAddress(
           /* Sanity check */
           ASSERT(Address->Address[0].Address[0].sin_port == AddrFile->Port);
       }
+      else if (!AddrIsUnspecified(&AddrFile->Address))
+      {
+          /* The client is trying to bind to a local address so allocate a port now too */
+          AddrFile->Port = TCPAllocatePort(0);
+          
+          /* Check for bind success */
+          if (AddrFile->Port == 0xffff)
+          {
+              ExFreePoolWithTag(AddrFile, ADDR_FILE_TAG);
+              return STATUS_ADDRESS_ALREADY_EXISTS;
+          }
+      }
       else
       {
-          /* The client wants an unspecified port so we wait to see what the TCP library gives us */
+          /* The client wants an unspecified port with an unspecified address so we wait to see what the TCP library gives us */
           AddrFile->Port = 0;
       }