Author: cgutman
Date: Mon Jul  4 19:13:45 2011
New Revision: 52539

URL: http://svn.reactos.org/svn/reactos?rev=52539&view=rev
Log:
[AFD]
- Move the TdiReceiveDatagram call to WarmSocketForBind like it is done for 
connects

Modified:
    trunk/reactos/drivers/network/afd/afd/bind.c

Modified: trunk/reactos/drivers/network/afd/afd/bind.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/bind.c?rev=52539&r1=52538&r2=52539&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/bind.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/bind.c [iso-8859-1] Mon Jul  4 
19:13:45 2011
@@ -37,13 +37,33 @@
 
     if (FCB->Flags & AFD_ENDPOINT_CONNECTIONLESS)
     {
-        Status = TdiQueryMaxDatagramLength(FCB->AddressFile.Object,
-                                           &FCB->Recv.Size);
-        if (NT_SUCCESS(Status))
+        if (!FCB->Recv.Size)
+        {
+            Status = TdiQueryMaxDatagramLength(FCB->AddressFile.Object,
+                                               &FCB->Recv.Size);
+        }
+
+        if (NT_SUCCESS(Status) && !FCB->Recv.Window)
         {
             FCB->Recv.Window = ExAllocatePool(PagedPool, FCB->Recv.Size);
             if (!FCB->Recv.Window)
                 Status = STATUS_NO_MEMORY;
+        }
+        
+        if (NT_SUCCESS(Status))
+        {
+            Status = TdiReceiveDatagram(&FCB->ReceiveIrp.InFlightRequest,
+                                        FCB->AddressFile.Object,
+                                        0,
+                                        FCB->Recv.Window,
+                                        FCB->Recv.Size,
+                                        FCB->AddressFrom,
+                                        &FCB->ReceiveIrp.Iosb,
+                                        PacketSocketRecvComplete,
+                                        FCB);
+            
+            /* We don't want to wait for this read to complete. */
+            if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS;
         }
     }
 
@@ -78,27 +98,6 @@
        Status = WarmSocketForBind( FCB );
     AFD_DbgPrint(MID_TRACE,("FCB->Flags %x\n", FCB->Flags));
 
-    if( !NT_SUCCESS(Status) )
-        return UnlockAndMaybeComplete(FCB, Status, Irp, 0);
-
-    if( FCB->Flags & AFD_ENDPOINT_CONNECTIONLESS ) {
-       AFD_DbgPrint(MID_TRACE,("Calling TdiReceiveDatagram\n"));
-
-       Status = TdiReceiveDatagram
-           ( &FCB->ReceiveIrp.InFlightRequest,
-             FCB->AddressFile.Object,
-             0,
-             FCB->Recv.Window,
-             FCB->Recv.Size,
-             FCB->AddressFrom,
-             &FCB->ReceiveIrp.Iosb,
-             PacketSocketRecvComplete,
-             FCB );
-
-       /* We don't want to wait for this read to complete. */
-       if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS;
-    }
-
     if (NT_SUCCESS(Status))
         FCB->State = SOCKET_STATE_BOUND;
 


Reply via email to