- Move the TdiReceiveDatagram call to WarmSocketForBind like it is done for connects

svn path=/trunk/; revision=52539
This commit is contained in:
Cameron Gutman 2011-07-04 19:13:45 +00:00
parent 54f9acbf0d
commit 4e5a783a2f

View file

@ -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;