From 4e5a783a2f0744a0656f68b166b64f6a32ac4f00 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 4 Jul 2011 19:13:45 +0000 Subject: [PATCH] [AFD] - Move the TdiReceiveDatagram call to WarmSocketForBind like it is done for connects svn path=/trunk/; revision=52539 --- reactos/drivers/network/afd/afd/bind.c | 47 +++++++++++++------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/reactos/drivers/network/afd/afd/bind.c b/reactos/drivers/network/afd/afd/bind.c index 8144d035030..91ee6e7cc04 100644 --- a/reactos/drivers/network/afd/afd/bind.c +++ b/reactos/drivers/network/afd/afd/bind.c @@ -37,14 +37,34 @@ NTSTATUS WarmSocketForBind( PAFD_FCB FCB ) { 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; + } } AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); @@ -78,27 +98,6 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, 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;