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:
Art Yerkes 2005-02-25 05:27:43 +00:00
parent 9127a1ca9d
commit 333c14350e

View file

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