mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 13:45:58 +00:00
[MSAFD]
- Update lpcbBytesReturned when FIONREAD is called - Fix the value inside lpErrno when XxxSocketInformation() fails - Pass the unrecognized IOCTLs to the winsock helper (no behavior change for this yet because wshtcpip's WSHIoctl is unimplemented) svn path=/trunk/; revision=48522
This commit is contained in:
parent
11f2175562
commit
17e0e75eb5
|
@ -1910,6 +1910,7 @@ WSPIoctl(IN SOCKET Handle,
|
|||
OUT LPINT lpErrno)
|
||||
{
|
||||
PSOCKET_INFORMATION Socket = NULL;
|
||||
BOOLEAN NeedsCompletion;
|
||||
|
||||
/* Get the Socket Structure associate to this Socket*/
|
||||
Socket = GetSocketStructure(Handle);
|
||||
|
@ -1919,6 +1920,8 @@ WSPIoctl(IN SOCKET Handle,
|
|||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
*lpcbBytesReturned = 0;
|
||||
|
||||
switch( dwIoControlCode )
|
||||
{
|
||||
case FIONBIO:
|
||||
|
@ -1928,18 +1931,45 @@ WSPIoctl(IN SOCKET Handle,
|
|||
return SOCKET_ERROR;
|
||||
}
|
||||
Socket->SharedData.NonBlocking = *((PULONG)lpvInBuffer) ? 1 : 0;
|
||||
return SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, (PULONG)lpvInBuffer, NULL);
|
||||
*lpErrno = SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, (PULONG)lpvInBuffer, NULL);
|
||||
if (*lpErrno != NO_ERROR)
|
||||
return SOCKET_ERROR;
|
||||
else
|
||||
return NO_ERROR;
|
||||
case FIONREAD:
|
||||
if( cbOutBuffer < sizeof(INT) || IS_INTRESOURCE(lpvOutBuffer) )
|
||||
{
|
||||
*lpErrno = WSAEFAULT;
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
return GetSocketInformation(Socket, AFD_INFO_RECEIVE_CONTENT_SIZE, (PULONG)lpvOutBuffer, NULL);
|
||||
default:
|
||||
*lpErrno = WSAEINVAL;
|
||||
*lpErrno = GetSocketInformation(Socket, AFD_INFO_RECEIVE_CONTENT_SIZE, (PULONG)lpvOutBuffer, NULL);
|
||||
if (*lpErrno != NO_ERROR)
|
||||
{
|
||||
*lpcbBytesReturned = sizeof(ULONG);
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
else
|
||||
return NO_ERROR;
|
||||
default:
|
||||
*lpErrno = Socket->HelperData->WSHIoctl(Socket->HelperContext,
|
||||
Handle,
|
||||
Socket->TdiAddressHandle,
|
||||
Socket->TdiConnectionHandle,
|
||||
dwIoControlCode,
|
||||
lpvInBuffer,
|
||||
cbInBuffer,
|
||||
lpvOutBuffer,
|
||||
cbOutBuffer,
|
||||
lpcbBytesReturned,
|
||||
lpOverlapped,
|
||||
lpCompletionRoutine,
|
||||
(LPBOOL)&NeedsCompletion);
|
||||
|
||||
if (*lpErrno != NO_ERROR)
|
||||
return SOCKET_ERROR;
|
||||
else
|
||||
return NO_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue