[MSAFD]
[reactos.git] / reactos / dll / win32 / msafd / misc / sndrcv.c
index 212b4fc..db26a36 100644 (file)
@@ -29,6 +29,11 @@ WSPAsyncSelect(IN  SOCKET Handle,
 
     /* Get the Socket Structure associated to this Socket */
     Socket = GetSocketStructure(Handle);
+    if (!Socket)
+    {
+       *lpErrno = WSAENOTSOCK;
+       return SOCKET_ERROR;
+    }
 
     /* Allocate the Async Data Structure to pass on to the Thread later */
     AsyncData = HeapAlloc(GetProcessHeap(), 0, sizeof(*AsyncData));
@@ -111,6 +116,11 @@ WSPRecv(SOCKET Handle,
 
     /* Get the Socket Structure associate to this Socket*/
     Socket = GetSocketStructure(Handle);
+    if (!Socket)
+    {
+       *lpErrno = WSAENOTSOCK;
+       return SOCKET_ERROR;
+    }
 
     Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
                             NULL, 1, FALSE );
@@ -182,7 +192,7 @@ WSPRecv(SOCKET Handle,
 
     /* Send IOCTL */
     Status = NtDeviceIoControlFile((HANDLE)Handle,
-        Event ? Event : SockEvent,
+        Event,
         APCFunction,
         APCContext,
         IOSB,
@@ -223,7 +233,7 @@ WSPRecv(SOCKET Handle,
     }
 
     /* Re-enable Async Event */
-    if (*ReceiveFlags == MSG_OOB)
+    if (*ReceiveFlags & MSG_OOB)
     {
         SockReenableAsyncSelectEvent(Socket, FD_OOB);
     }
@@ -261,6 +271,11 @@ WSPRecvFrom(SOCKET Handle,
 
     /* Get the Socket Structure associate to this Socket*/
     Socket = GetSocketStructure(Handle);
+    if (!Socket)
+    {
+       *lpErrno = WSAENOTSOCK;
+       return SOCKET_ERROR;
+    }
 
     Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
                             NULL, 1, FALSE );
@@ -334,7 +349,7 @@ WSPRecvFrom(SOCKET Handle,
 
     /* Send IOCTL */
     Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                    Event ? Event : SockEvent,
+                                    Event,
                                     APCFunction,
                                     APCContext,
                                     IOSB,
@@ -399,6 +414,11 @@ WSPSend(SOCKET Handle,
 
     /* Get the Socket Structure associate to this Socket*/
     Socket = GetSocketStructure(Handle);
+    if (!Socket)
+    {
+       *lpErrno = WSAENOTSOCK;
+       return SOCKET_ERROR;
+    }
 
     Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
                             NULL, 1, FALSE );
@@ -461,7 +481,7 @@ WSPSend(SOCKET Handle,
 
     /* Send IOCTL */
     Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                    Event ? Event : SockEvent,
+                                    Event,
                                     APCFunction,
                                     APCContext,
                                     IOSB,
@@ -483,7 +503,7 @@ WSPSend(SOCKET Handle,
     if (Status == STATUS_PENDING)
     {
         AFD_DbgPrint(MID_TRACE,("Leaving (Pending)\n"));
-        return WSA_IO_PENDING;
+        return MsafdReturnWithErrno(Status, lpErrno, IOSB->Information, lpNumberOfBytesSent);
     }
 
     /* Re-enable Async Event */
@@ -523,6 +543,11 @@ WSPSendTo(SOCKET Handle,
 
     /* Get the Socket Structure associate to this Socket */
     Socket = GetSocketStructure(Handle);
+    if (!Socket)
+    {
+       *lpErrno = WSAENOTSOCK;
+       return SOCKET_ERROR;
+    }
 
     /* Bind us First */
     if (Socket->SharedData.State == SocketOpen)
@@ -540,7 +565,8 @@ WSPSendTo(SOCKET Handle,
                                                    BindAddress,
                                                    &BindAddressLength);
         /* Bind it */
-        WSPBind(Handle, BindAddress, BindAddressLength, NULL);
+        if (WSPBind(Handle, BindAddress, BindAddressLength, lpErrno) == SOCKET_ERROR)
+            return SOCKET_ERROR;
     }
 
     RemoteAddress = HeapAlloc(GlobalHeap, 0, 0x6 + SocketAddressLength);
@@ -612,7 +638,7 @@ WSPSendTo(SOCKET Handle,
 
     /* Send IOCTL */
     Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                   Event ? Event : SockEvent,
+                                   Event,
                                    APCFunction,
                                    APCContext,
                                    IOSB,
@@ -637,11 +663,8 @@ WSPSendTo(SOCKET Handle,
         HeapFree(GlobalHeap, 0, BindAddress);
     }
 
-    if (Status == STATUS_PENDING)
-        return WSA_IO_PENDING;
-
-    /* Re-enable Async Event */
-    SockReenableAsyncSelectEvent(Socket, FD_WRITE);
+    if (Status != STATUS_PENDING)
+       SockReenableAsyncSelectEvent(Socket, FD_WRITE);
 
     return MsafdReturnWithErrno(Status, lpErrno, IOSB->Information, lpNumberOfBytesSent);
 }