mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
[0.4.7][MSAFD] Fix non-blocking sockets support for recv() (#5575)
by porting back: 0.4.15-dev-6491-g442f5dfab5
[MSAFD] Fix non-blocking sockets support for recv() (#5575) CORE-14486 for Nginx web server; Firefox 52, Mypal 29.3.0, New Moon 28 web browser partially 0.4.15-dev-4492-g03422451b3
[REACTOS] Add '\n' to debug logs. Only the [MSAFD] parts Also strip some EOL-whitespace and sacrifice some good-path-TRACEs to not increase the binary sizes: msafd.dll GCC8.4.0dbg RosBEWin2.2.2 master 155.648 msafd.dll GCC4.7.2dbg RosBEWin2.1.6 0.4.14 144.384 -> 142.336 msafd.dll GCC4.7.2dbg RosBEWin2.1.6 0.4.13 144.384 -> 142.336 msafd.dll GCC4.7.2dbg RosBEWin2.1.6 0.4.12 145.920 -> 144.896 msafd.dll GCC4.7.2dbg RosBEWin2.1.6 0.4.11 143.872 -> 141.824 msafd.dll GCC4.7.2dbg RosBEWin2.1.6 0.4.10 142.336 -> 140.800 msafd.dll GCC4.7.2dbg RosBEWin2.1.6 0.4. 9 142.336 -> 140.800 msafd.dll GCC4.7.2dbg RosBEWin2.1.6 0.4. 8 142.336 -> 140.800 msafd.dll GCC4.7.2dbg RosBEWin2.1.6 0.4. 7 142.336 -> 140.800
This commit is contained in:
parent
c9a2e31ae8
commit
a99751b915
3 changed files with 28 additions and 38 deletions
|
@ -72,9 +72,6 @@ WSPSocket(int AddressFamily,
|
|||
INT Status;
|
||||
PSOCK_SHARED_INFO SharedData = NULL;
|
||||
|
||||
TRACE("Creating Socket, getting TDI Name - AddressFamily (%d) SocketType (%d) Protocol (%d).\n",
|
||||
AddressFamily, SocketType, Protocol);
|
||||
|
||||
if (lpProtocolInfo && lpProtocolInfo->dwServiceFlags3 != 0 && lpProtocolInfo->dwServiceFlags4 != 0)
|
||||
{
|
||||
/* Duplpicating socket from different process */
|
||||
|
@ -222,7 +219,6 @@ WSPSocket(int AddressFamily,
|
|||
if( Socket->SharedData->SocketType == SOCK_DGRAM ||
|
||||
Socket->SharedData->SocketType == SOCK_RAW )
|
||||
{
|
||||
TRACE("Connectionless socket\n");
|
||||
Socket->SharedData->ServiceFlags1 |= XP1_CONNECTIONLESS;
|
||||
}
|
||||
Socket->Handle = INVALID_SOCKET;
|
||||
|
@ -415,8 +411,6 @@ ok:
|
|||
Upcalls.lpWPUModifyIFSHandle(Socket->ProtocolInfo.dwCatalogEntryId, (SOCKET)Sock, lpErrno);
|
||||
|
||||
/* Return Socket Handle */
|
||||
TRACE("Success %x\n", Sock);
|
||||
|
||||
return (SOCKET)Sock;
|
||||
|
||||
error:
|
||||
|
@ -648,7 +642,7 @@ WSPCloseSocket(IN SOCKET Handle,
|
|||
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("NtCreateEvent failed: 0x%08x", Status);
|
||||
ERR("NtCreateEvent failed: 0x%08x\n", Status);
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
|
@ -663,7 +657,7 @@ WSPCloseSocket(IN SOCKET Handle,
|
|||
if (Status)
|
||||
{
|
||||
if (lpErrno) *lpErrno = Status;
|
||||
ERR("WSHNotify failed. Error 0x%#x", Status);
|
||||
ERR("WSHNotify failed. Error 0x%#x\n", Status);
|
||||
NtClose(SockEvent);
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
@ -1118,8 +1112,6 @@ WSPSelect(IN int nfds,
|
|||
|
||||
PollBufferSize = sizeof(*PollInfo) + ((HandleCount - 1) * sizeof(AFD_HANDLE));
|
||||
|
||||
TRACE("HandleCount: %u BufferSize: %u\n", HandleCount, PollBufferSize);
|
||||
|
||||
/* Convert Timeout to NT Format */
|
||||
if (timeout == NULL)
|
||||
{
|
||||
|
@ -1298,8 +1290,6 @@ WSPSelect(IN int nfds,
|
|||
PollInfo,
|
||||
PollBufferSize);
|
||||
|
||||
TRACE("DeviceIoControlFile => %x\n", Status);
|
||||
|
||||
/* Wait for Completion */
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
|
@ -1400,15 +1390,12 @@ WSPSelect(IN int nfds,
|
|||
*lpErrno = WSAEINVAL;
|
||||
break;
|
||||
}
|
||||
TRACE("*lpErrno = %x\n", *lpErrno);
|
||||
}
|
||||
|
||||
HandleCount = (readfds ? readfds->fd_count : 0) +
|
||||
(writefds && writefds != readfds ? writefds->fd_count : 0) +
|
||||
(exceptfds && exceptfds != readfds && exceptfds != writefds ? exceptfds->fd_count : 0);
|
||||
|
||||
TRACE("%d events\n", HandleCount);
|
||||
|
||||
return HandleCount;
|
||||
}
|
||||
|
||||
|
@ -1492,22 +1479,25 @@ WSPAccept(SOCKET Handle,
|
|||
ListenReceiveData = (PAFD_RECEIVED_ACCEPT_DATA)ReceiveBuffer;
|
||||
|
||||
/* If this is non-blocking, make sure there's something for us to accept */
|
||||
FD_ZERO(&ReadSet);
|
||||
FD_SET(Socket->Handle, &ReadSet);
|
||||
Timeout.tv_sec=0;
|
||||
Timeout.tv_usec=0;
|
||||
|
||||
if (WSPSelect(0, &ReadSet, NULL, NULL, &Timeout, lpErrno) == SOCKET_ERROR)
|
||||
if (Socket->SharedData->NonBlocking)
|
||||
{
|
||||
NtClose(SockEvent);
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
FD_ZERO(&ReadSet);
|
||||
FD_SET(Socket->Handle, &ReadSet);
|
||||
Timeout.tv_sec=0;
|
||||
Timeout.tv_usec=0;
|
||||
|
||||
if (ReadSet.fd_array[0] != Socket->Handle)
|
||||
{
|
||||
NtClose(SockEvent);
|
||||
if (lpErrno) *lpErrno = WSAEWOULDBLOCK;
|
||||
return SOCKET_ERROR;
|
||||
if (WSPSelect(0, &ReadSet, NULL, NULL, &Timeout, lpErrno) == SOCKET_ERROR)
|
||||
{
|
||||
NtClose(SockEvent);
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
if (ReadSet.fd_array[0] != Socket->Handle)
|
||||
{
|
||||
NtClose(SockEvent);
|
||||
if (lpErrno) *lpErrno = WSAEWOULDBLOCK;
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
/* Send IOCTL */
|
||||
|
@ -1779,6 +1769,7 @@ WSPAccept(SOCKET Handle,
|
|||
|
||||
AcceptSocketInfo->SharedData->State = SocketConnected;
|
||||
AcceptSocketInfo->SharedData->ConnectTime = GetCurrentTimeInSeconds();
|
||||
AcceptSocketInfo->SharedData->NonBlocking = Socket->SharedData->NonBlocking;
|
||||
|
||||
/* Return Address in SOCKADDR FORMAT */
|
||||
if( SocketAddress )
|
||||
|
@ -1795,8 +1786,6 @@ WSPAccept(SOCKET Handle,
|
|||
/* Re-enable Async Event */
|
||||
SockReenableAsyncSelectEvent(Socket, FD_ACCEPT);
|
||||
|
||||
TRACE("Socket %x\n", AcceptSocket);
|
||||
|
||||
if (Status == STATUS_SUCCESS && (Socket->HelperEvents & WSH_NOTIFY_ACCEPT))
|
||||
{
|
||||
Status = Socket->HelperData->WSHNotify(Socket->HelperContext,
|
||||
|
@ -2892,7 +2881,6 @@ WSPStartup(IN WORD wVersionRequested,
|
|||
IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
|
||||
IN WSPUPCALLTABLE UpcallTable,
|
||||
OUT LPWSPPROC_TABLE lpProcTable)
|
||||
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
|
@ -2945,7 +2933,6 @@ WSPStartup(IN WORD wVersionRequested,
|
|||
CatalogEntryId = lpProtocolInfo->dwCatalogEntryId;
|
||||
}
|
||||
|
||||
TRACE("Status (%d).\n", Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -3082,7 +3069,7 @@ WSPStringToAddress(IN LPWSTR AddressString,
|
|||
/* move over the dot to next ip part */
|
||||
(*bp)++;
|
||||
}
|
||||
|
||||
|
||||
/* check dots count */
|
||||
if (numdots != 3)
|
||||
{
|
||||
|
@ -3139,8 +3126,6 @@ WSPAPI
|
|||
WSPCleanup(OUT LPINT lpErrno)
|
||||
|
||||
{
|
||||
TRACE("Leaving.\n");
|
||||
|
||||
if (lpErrno) *lpErrno = NO_ERROR;
|
||||
|
||||
return 0;
|
||||
|
@ -3341,7 +3326,6 @@ SetSocketInformation(PSOCKET_INFORMATION Socket,
|
|||
/* Overlapped request for non overlapped opened socket */
|
||||
if ((Socket->SharedData->CreateFlags & SO_SYNCHRONOUS_NONALERT) != 0)
|
||||
{
|
||||
TRACE("Opened without flag WSA_FLAG_OVERLAPPED. Do nothing.\n");
|
||||
return 0;
|
||||
}
|
||||
if (CompletionRoutine == NULL)
|
||||
|
|
|
@ -192,7 +192,7 @@ WSPEnumNetworkEvents(
|
|||
|
||||
if (Status != STATUS_SUCCESS)
|
||||
{
|
||||
ERR("Status 0x%08x", Status);
|
||||
ERR("Status 0x%08x\n", Status);
|
||||
return MsafdReturnWithErrno(Status, lpErrno, 0, NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -294,6 +294,12 @@ WSPRecv(SOCKET Handle,
|
|||
NULL,
|
||||
0);
|
||||
|
||||
if (Status == STATUS_PENDING && Socket->SharedData->NonBlocking)
|
||||
{
|
||||
if (lpErrno) *lpErrno = WSAEWOULDBLOCK;
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
/* Wait for completion of not overlapped */
|
||||
if (Status == STATUS_PENDING && lpOverlapped == NULL)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue