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).
Modified: trunk/reactos/lib/msafd/misc/dllmain.c
_____
Modified: trunk/reactos/lib/msafd/misc/dllmain.c
--- trunk/reactos/lib/msafd/misc/dllmain.c 2005-02-25 03:02:45 UTC
(rev 13737)
+++ trunk/reactos/lib/msafd/misc/dllmain.c 2005-02-25 05:27:43 UTC
(rev 13738)
@@ -16,8 +16,8 @@
#include <rosrtl/string.h>
#ifdef DBG
-DWORD DebugTraceLevel = DEBUG_ULTRA;
-//DWORD DebugTraceLevel = 0;
+//DWORD DebugTraceLevel = DEBUG_ULTRA;
+DWORD DebugTraceLevel = 0;
#endif /* DBG */
HANDLE GlobalHeap;
@@ -120,6 +120,7 @@
Socket->SharedData.GroupID = g;
Socket->SharedData.GroupType = 0;
Socket->SharedData.UseSAN = FALSE;
+ Socket->SharedData.NonBlocking = FALSE; /* Sockets start
blocking */
Socket->SanData = NULL;
/* Ask alex about this */
@@ -137,6 +138,7 @@
/* Set up EA Buffer */
EABuffer = HeapAlloc(GlobalHeap, 0, SizeOfEA);
+ RtlZeroMemory(EABuffer, SizeOfEA);
EABuffer->NextEntryOffset = 0;
EABuffer->Flags = 0;
EABuffer->EaNameLength = AFD_PACKET_COMMAND_LENGTH;
@@ -265,19 +267,22 @@
DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD
Received,
LPDWORD ReturnedBytes ) {
- switch (Status) {
- case STATUS_CANT_WAIT: *Errno = WSAEWOULDBLOCK; break;
- case STATUS_TIMEOUT:
- case STATUS_SUCCESS:
- /* Return Number of bytes Read */
- if( ReturnedBytes ) *ReturnedBytes = Received; break;
- case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; *ReturnedBytes = 0;
break;
- case STATUS_PENDING: *Errno = WSA_IO_PENDING; break;
- case STATUS_BUFFER_OVERFLOW: *Errno = WSAEMSGSIZE; break;
- default: {
- DbgPrint("MSAFD: Error %x is unknown\n", Status);
- *Errno = WSAEINVAL; break;
- } break;
+ if( ReturnedBytes ) *ReturnedBytes = 0;
+ if( Errno ) {
+ switch (Status) {
+ case STATUS_CANT_WAIT: *Errno = WSAEWOULDBLOCK; break;
+ case STATUS_TIMEOUT:
+ case STATUS_SUCCESS:
+ /* Return Number of bytes Read */
+ if( ReturnedBytes ) *ReturnedBytes = Received; break;
+ case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; *ReturnedBytes
= 0; break;
+ case STATUS_PENDING: *Errno = WSA_IO_PENDING; break;
+ case STATUS_BUFFER_OVERFLOW: *Errno = WSAEMSGSIZE; break;
+ default: {
+ DbgPrint("MSAFD: Error %x is unknown\n", Status);
+ *Errno = WSAEINVAL; break;
+ } break;
+ }
}
/* Success */
@@ -588,6 +593,9 @@
PollBufferSize = sizeof(*PollInfo) +
(HandleCount * sizeof(AFD_HANDLE));
+ AFD_DbgPrint(MID_TRACE,("HandleCount: %d BufferSize: %d\n",
+ HandleCount, PollBufferSize));
+
/* Allocate */
PollBuffer = HeapAlloc(GlobalHeap, 0, PollBufferSize);
PollInfo = (PAFD_POLL_INFO)PollBuffer;
Show replies by date