]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Update to ensure the I/O Completion Ports code checks the various error states and...
authorDanny Mayer <mayer@ntp.org>
Tue, 16 Mar 2004 02:04:56 +0000 (21:04 -0500)
committerDanny Mayer <mayer@ntp.org>
Tue, 16 Mar 2004 02:04:56 +0000 (21:04 -0500)
bk: 405660c8G-ipHkIKQGs-N0uPmgYaww

ports/winnt/ntpd/ntp_iocompletionport.c

index a96ee0b1d827357f12137b0408b0e7c5709738b9..a7ae1b5235a3c708fdc4072b018e13eaf4fa1633 100644 (file)
@@ -354,6 +354,7 @@ io_completion_port_sendto(
 {
        transmitbuf *buff = NULL;
        DWORD Result = ERROR_SUCCESS;
+       int errval;
 
        if (len <= sizeof(buff->pkt)) {
                buff = get_free_transmit_buffer();
@@ -367,11 +368,23 @@ io_completion_port_sendto(
 
                        buff->iocompletioninfo.iofunction = OnSendToComplete;
                        Result = WSASendTo(inter->fd, &buff->wsabuf, 1, &BytesSent, Flags, (struct sockaddr *) dest, sizeof(struct sockaddr_in), &buff->iocompletioninfo.overlapped, NULL);
-                       if ((Result == SOCKET_ERROR) && (WSAGetLastError() == WSA_IO_PENDING)) {
-                               Result = ERROR_SUCCESS;
-                       }
-                       else if (Result != ERROR_SUCCESS) {
-                               netsyslog(LOG_ERR, "WSASendTo - error sending message: %m");
+
+                       if(Result == SOCKET_ERROR)
+                       {
+                               errval = WSAGetLastError();
+                               switch (errval) {
+
+                               case NO_ERROR :
+                               case WSA_IO_INCOMPLETE :
+                               case WSA_WAIT_IO_COMPLETION :
+                               case WSA_IO_PENDING :
+                                       Result = ERROR_SUCCESS;
+                                       break ;
+
+                               default :
+                                       netsyslog(LOG_ERR, "WSASendTo - error sending message: %m");
+                                       break;
+                               }
                        }
 #ifdef DEBUG
                        if (debug > 2) {
@@ -381,13 +394,14 @@ io_completion_port_sendto(
                                        printf("WSASendTo - %d bytes to %s : %d\n", len, strbuffer, Result);
                        }
 #endif
+                       return (Result);
                }
                else {
 #ifdef DEBUG
                        if (debug)
                        printf("No more transmit buffers left - data discarded\n");
 #endif
-               return ERROR_OUTOFMEMORY;
+                       return ERROR_OUTOFMEMORY;
                }
        }
        else {