rx: For AFS_RXERRQ_ENV, retry sendmsg on error
[openafs.git] / src / rx / rx_lwp.c
index fa4ee6d..dfeb674 100644 (file)
@@ -334,8 +334,7 @@ rx_ListenerProc(void *dummy)
        rxi_ServerProc(threadID, newcall, &sock);
        /* osi_Assert(sock != OSI_NULLSOCKET); */
     }
-    /* not reached */
-    return NULL;
+    AFS_UNREACHED(return(NULL));
 }
 
 /* This is the server process request loop. The server process loop
@@ -368,8 +367,7 @@ rx_ServerProc(void * unused)
        /* osi_Assert(threadID != -1); */
        /* osi_Assert(newcall != NULL); */
     }
-    /* not reached */
-    return NULL;
+    AFS_UNREACHED(return(NULL));
 }
 
 /*
@@ -415,12 +413,9 @@ rxi_Recvmsg(osi_socket socket, struct msghdr *msg_p, int flags)
     int code;
     code = recvmsg(socket, msg_p, flags);
 
-#ifdef AFS_RXERRQ_ENV
     if (code < 0) {
-       while((rxi_HandleSocketError(socket)) > 0)
-           ;
+       rxi_HandleSocketErrors(socket);
     }
-#endif
 
     return code;
 }
@@ -432,9 +427,9 @@ rxi_Recvmsg(osi_socket socket, struct msghdr *msg_p, int flags)
 int
 rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags)
 {
+    int err = 0;
     fd_set *sfds = (fd_set *) 0;
     while (sendmsg(socket, msg_p, flags) == -1) {
-       int err;
 
 #ifdef AFS_NT40_ENV
        err = WSAGetLastError();
@@ -449,14 +444,11 @@ rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags)
            if (!(sfds = IOMGR_AllocFDSet())) {
                (osi_Msg "rx failed to alloc fd_set: ");
                perror("rx_sendmsg");
-               return -1;
+               err = ENOMEM;
+               goto error;
            }
            FD_SET(socket, sfds);
        }
-#ifdef AFS_RXERRQ_ENV
-       while((rxi_HandleSocketError(socket)) > 0)
-         ;
-#endif
 #ifdef AFS_NT40_ENV
        if (err)
 #elif defined(AFS_LINUX22_ENV)
@@ -471,9 +463,7 @@ rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags)
        {
            (osi_Msg "rx failed to send packet: ");
            perror("rx_sendmsg");
-            if (err > 0)
-              return -err;
-           return -1;
+           goto error;
        }
        while ((err = select(
 #ifdef AFS_NT40_ENV
@@ -491,5 +481,12 @@ rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags)
     if (sfds)
        IOMGR_FreeFDSet(sfds);
     return 0;
+
+ error:
+    if (sfds)
+       IOMGR_FreeFDSet(sfds);
+    if (err > 0)
+       return -err;
+    return -1;
 }
 #endif