/* Send IOCTL */
Status = NtDeviceIoControlFile((HANDLE)Handle,
- Event ? Event : SockEvent,
+ Event,
APCFunction,
APCContext,
IOSB,
/* Return the Flags */
*ReceiveFlags = 0;
+ if (Status == STATUS_PENDING)
+ return MsafdReturnWithErrno(Status, lpErrno, IOSB->Information, lpNumberOfBytesRead);
+
switch (Status)
{
case STATUS_RECEIVE_EXPEDITED:
}
/* Re-enable Async Event */
- if (*ReceiveFlags == MSG_OOB)
+ if (*ReceiveFlags & MSG_OOB)
{
SockReenableAsyncSelectEvent(Socket, FD_OOB);
}
/* Send IOCTL */
Status = NtDeviceIoControlFile((HANDLE)Handle,
- Event ? Event : SockEvent,
+ Event,
APCFunction,
APCContext,
IOSB,
/* Return the Flags */
*ReceiveFlags = 0;
+ if (Status == STATUS_PENDING)
+ return MsafdReturnWithErrno(Status, lpErrno, IOSB->Information, lpNumberOfBytesRead);
+
switch (Status)
{
case STATUS_RECEIVE_EXPEDITED: *ReceiveFlags = MSG_OOB;
/* Send IOCTL */
Status = NtDeviceIoControlFile((HANDLE)Handle,
- Event ? Event : SockEvent,
+ Event,
APCFunction,
APCContext,
IOSB,
if (Status == STATUS_PENDING)
{
AFD_DbgPrint(MID_TRACE,("Leaving (Pending)\n"));
- return WSA_IO_PENDING;
+ return MsafdReturnWithErrno(Status, lpErrno, IOSB->Information, lpNumberOfBytesSent);
}
/* Re-enable Async Event */
/* Send IOCTL */
Status = NtDeviceIoControlFile((HANDLE)Handle,
- Event ? Event : SockEvent,
+ Event,
APCFunction,
APCContext,
IOSB,
HeapFree(GlobalHeap, 0, BindAddress);
}
- if (Status == STATUS_PENDING)
- return WSA_IO_PENDING;
-
- /* Re-enable Async Event */
- SockReenableAsyncSelectEvent(Socket, FD_WRITE);
+ if (Status != STATUS_PENDING)
+ SockReenableAsyncSelectEvent(Socket, FD_WRITE);
return MsafdReturnWithErrno(Status, lpErrno, IOSB->Information, lpNumberOfBytesSent);
}