mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 03:15:43 +00:00
Set nonblocking on all sockets initially.
Zero flags and other junk in the ea buffer when creating a new socket. More correct error return function (check both Errno and ReturnedBytes ptrs). svn path=/trunk/; revision=13738
This commit is contained in:
parent
9127a1ca9d
commit
333c14350e
1 changed files with 23 additions and 15 deletions
|
@ -16,8 +16,8 @@
|
||||||
#include <rosrtl/string.h>
|
#include <rosrtl/string.h>
|
||||||
|
|
||||||
#ifdef DBG
|
#ifdef DBG
|
||||||
DWORD DebugTraceLevel = DEBUG_ULTRA;
|
//DWORD DebugTraceLevel = DEBUG_ULTRA;
|
||||||
//DWORD DebugTraceLevel = 0;
|
DWORD DebugTraceLevel = 0;
|
||||||
#endif /* DBG */
|
#endif /* DBG */
|
||||||
|
|
||||||
HANDLE GlobalHeap;
|
HANDLE GlobalHeap;
|
||||||
|
@ -120,6 +120,7 @@ WSPSocket(
|
||||||
Socket->SharedData.GroupID = g;
|
Socket->SharedData.GroupID = g;
|
||||||
Socket->SharedData.GroupType = 0;
|
Socket->SharedData.GroupType = 0;
|
||||||
Socket->SharedData.UseSAN = FALSE;
|
Socket->SharedData.UseSAN = FALSE;
|
||||||
|
Socket->SharedData.NonBlocking = FALSE; /* Sockets start blocking */
|
||||||
Socket->SanData = NULL;
|
Socket->SanData = NULL;
|
||||||
|
|
||||||
/* Ask alex about this */
|
/* Ask alex about this */
|
||||||
|
@ -137,6 +138,7 @@ WSPSocket(
|
||||||
|
|
||||||
/* Set up EA Buffer */
|
/* Set up EA Buffer */
|
||||||
EABuffer = HeapAlloc(GlobalHeap, 0, SizeOfEA);
|
EABuffer = HeapAlloc(GlobalHeap, 0, SizeOfEA);
|
||||||
|
RtlZeroMemory(EABuffer, SizeOfEA);
|
||||||
EABuffer->NextEntryOffset = 0;
|
EABuffer->NextEntryOffset = 0;
|
||||||
EABuffer->Flags = 0;
|
EABuffer->Flags = 0;
|
||||||
EABuffer->EaNameLength = AFD_PACKET_COMMAND_LENGTH;
|
EABuffer->EaNameLength = AFD_PACKET_COMMAND_LENGTH;
|
||||||
|
@ -265,19 +267,22 @@ error:
|
||||||
|
|
||||||
DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received,
|
DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received,
|
||||||
LPDWORD ReturnedBytes ) {
|
LPDWORD ReturnedBytes ) {
|
||||||
switch (Status) {
|
if( ReturnedBytes ) *ReturnedBytes = 0;
|
||||||
case STATUS_CANT_WAIT: *Errno = WSAEWOULDBLOCK; break;
|
if( Errno ) {
|
||||||
case STATUS_TIMEOUT:
|
switch (Status) {
|
||||||
case STATUS_SUCCESS:
|
case STATUS_CANT_WAIT: *Errno = WSAEWOULDBLOCK; break;
|
||||||
/* Return Number of bytes Read */
|
case STATUS_TIMEOUT:
|
||||||
if( ReturnedBytes ) *ReturnedBytes = Received; break;
|
case STATUS_SUCCESS:
|
||||||
case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; *ReturnedBytes = 0; break;
|
/* Return Number of bytes Read */
|
||||||
case STATUS_PENDING: *Errno = WSA_IO_PENDING; break;
|
if( ReturnedBytes ) *ReturnedBytes = Received; break;
|
||||||
case STATUS_BUFFER_OVERFLOW: *Errno = WSAEMSGSIZE; break;
|
case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; *ReturnedBytes = 0; break;
|
||||||
default: {
|
case STATUS_PENDING: *Errno = WSA_IO_PENDING; break;
|
||||||
DbgPrint("MSAFD: Error %x is unknown\n", Status);
|
case STATUS_BUFFER_OVERFLOW: *Errno = WSAEMSGSIZE; break;
|
||||||
*Errno = WSAEINVAL; break;
|
default: {
|
||||||
} break;
|
DbgPrint("MSAFD: Error %x is unknown\n", Status);
|
||||||
|
*Errno = WSAEINVAL; break;
|
||||||
|
} break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Success */
|
/* Success */
|
||||||
|
@ -588,6 +593,9 @@ WSPSelect(
|
||||||
PollBufferSize = sizeof(*PollInfo) +
|
PollBufferSize = sizeof(*PollInfo) +
|
||||||
(HandleCount * sizeof(AFD_HANDLE));
|
(HandleCount * sizeof(AFD_HANDLE));
|
||||||
|
|
||||||
|
AFD_DbgPrint(MID_TRACE,("HandleCount: %d BufferSize: %d\n",
|
||||||
|
HandleCount, PollBufferSize));
|
||||||
|
|
||||||
/* Allocate */
|
/* Allocate */
|
||||||
PollBuffer = HeapAlloc(GlobalHeap, 0, PollBufferSize);
|
PollBuffer = HeapAlloc(GlobalHeap, 0, PollBufferSize);
|
||||||
PollInfo = (PAFD_POLL_INFO)PollBuffer;
|
PollInfo = (PAFD_POLL_INFO)PollBuffer;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue