* net: rearranged poll() return value handling for clarity
authorUrban Wallasch <urban.wallasch@freenet.de>
Thu, 24 Oct 2019 04:17:27 +0000 (06:17 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Thu, 24 Oct 2019 04:17:27 +0000 (06:17 +0200)
net/net.c

index 957e82d853301732a7bb934a072b5ecd52bc3fa4..8a1c2d4900d805fef24b3df8905e633c2da88295 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -253,18 +253,30 @@ int tcp_accept(int sock, int timeout) {
     pfd.fd = sock;
     pfd.events = POLLIN;
     r = poll(&pfd, 1, timeout);
-    if (r == 1 && pfd.revents & (POLLIN | POLLERR | POLLHUP)) {
-        /* In case of POLLERR or POLLHUP we let accept() catch the error! */
-        struct sockaddr_storage addr;
-        struct sockaddr *paddr = (struct sockaddr *)&addr;
-        socklen_t addrlen = sizeof addr;
-        r = accept(sock, paddr, &addrlen);
-        if (r < 0) {
+    if (r == 1) {
+        if (pfd.revents & (POLLIN | POLLERR | POLLHUP)) {
+            /* In case of POLLERR or POLLHUP we let accept() catch the error! */
+            struct sockaddr_storage addr;
+            struct sockaddr *paddr = (struct sockaddr *)&addr;
+            socklen_t addrlen = sizeof addr;
+            r = accept(sock, paddr, &addrlen);
+            if (r < 0) {
+                r = EAI_SYSTEM;
+            }
+            else {
+                ADDR2STR(paddr, addrlen, stra, 100);
+                NETLOG_DBG("accept(%d) -> (%d, %s): Ok", sock, r, stra);
+            }
+        }
+        else if (pfd.revents & POLLNVAL) {
+            errno = EBADF;
             r = EAI_SYSTEM;
         }
         else {
-            ADDR2STR(paddr, addrlen, stra, 100);
-            NETLOG_DBG("accept(%d) -> (%d, %s): Ok", sock, r, stra);
+            NETLOG_DBG("This should never happen! (r=%d, revents=0x%04X)",
+                        r, (unsigned)pfd.revents);
+            errno = EIO;
+            r = EAI_SYSTEM;
         }
     }
     else if (r == 0) {
@@ -274,16 +286,6 @@ int tcp_accept(int sock, int timeout) {
     else if (r < 0) {
         r = EAI_SYSTEM;
     }
-    else if (pfd.revents & POLLNVAL) {
-        errno = EBADF;
-        r = EAI_SYSTEM;
-    }
-    else {
-        NETLOG_DBG("This should never happen! (r=%d, revents=0x%04X)",
-                    r, (unsigned)pfd.revents);
-        errno = EIO;
-        r = EAI_SYSTEM;
-    }
     if (r < 0) {
         NETLOG_ERR(r, "tcp_accept(%d)", sock);
     }
@@ -299,16 +301,28 @@ ssize_t recvfrom_tm(int fd, void *buf, size_t len, int flags,
     pfd.fd = fd;
     pfd.events = POLLIN;
     r = poll(&pfd, 1, timeout);
-    if (r == 1 && pfd.revents & (POLLIN | POLLERR | POLLHUP)) {
-        /* In case of POLLERR or POLLHUP we let recv() catch the error! */
-        r = recvfrom(fd, buf, len, flags | MSG_DONTWAIT, addr, alen);
-        if (r < 0 && errno == ENOTSOCK) {
-            NETLOG_DBG("recvfrom_tm(%d): not a socket, trying read()", fd);
-            r = read(fd, buf, len);
-            if (r >= 0 && alen != NULL)
-                *alen = 0;
+    if (r == 1) {
+        if (pfd.revents & (POLLIN | POLLERR | POLLHUP)) {
+            /* In case of POLLERR or POLLHUP we let recv() catch the error! */
+            r = recvfrom(fd, buf, len, flags | MSG_DONTWAIT, addr, alen);
+            if (r < 0 && errno == ENOTSOCK) {
+                NETLOG_DBG("recvfrom_tm(%d): not a socket, trying read()", fd);
+                r = read(fd, buf, len);
+                if (r >= 0 && alen != NULL)
+                    *alen = 0;
+            }
+            r = r < 0 ? EAI_SYSTEM : r;
+        }
+        else if (pfd.revents & POLLNVAL) {
+            errno = EBADF;
+            r = EAI_SYSTEM;
+        }
+        else {
+            NETLOG_DBG("This should never happen! (r=%zd, revents=0x%04X)",
+                        r, (unsigned)pfd.revents);
+            errno = EIO;
+            r = EAI_SYSTEM;
         }
-        r = r < 0 ? EAI_SYSTEM : r;
     }
     else if (r == 0) {
         errno = ETIME;
@@ -317,16 +331,6 @@ ssize_t recvfrom_tm(int fd, void *buf, size_t len, int flags,
     else if (r < 0) {
         r = EAI_SYSTEM;
     }
-    else if (pfd.revents & POLLNVAL) {
-        errno = EBADF;
-        r = EAI_SYSTEM;
-    }
-    else {
-        NETLOG_DBG("This should never happen! (r=%zd, revents=0x%04X)",
-                    r, (unsigned)pfd.revents);
-        errno = EIO;
-        r = EAI_SYSTEM;
-    }
     if (r < 0) {
         NETLOG_ERR(r, "recv_tm(%d)", fd);
     }
@@ -345,14 +349,26 @@ ssize_t sendto_tm(int fd, void *buf, size_t len, int flags,
     pfd.fd = fd;
     pfd.events = POLLOUT;
     r = poll(&pfd, 1, timeout);
-    if (r == 1 && pfd.revents & (POLLOUT | POLLERR | POLLHUP)) {
-        /* In case of POLLERR or POLLHUP we let send() catch the error! */
-        r = sendto(fd, buf, len, flags | MSG_DONTWAIT | MSG_NOSIGNAL, addr, alen);
-        if (r < 0 && errno == ENOTSOCK) {
-            NETLOG_DBG("sendto_tm(%d): not a socket, trying write()", fd);
-            r = write(fd, buf, len);
+    if (r == 1) {
+        if (pfd.revents & (POLLOUT | POLLERR | POLLHUP)) {
+            /* In case of POLLERR or POLLHUP we let send() catch the error! */
+            r = sendto(fd, buf, len, flags | MSG_DONTWAIT | MSG_NOSIGNAL, addr, alen);
+            if (r < 0 && errno == ENOTSOCK) {
+                NETLOG_DBG("sendto_tm(%d): not a socket, trying write()", fd);
+                r = write(fd, buf, len);
+            }
+            r = r < 0 ? EAI_SYSTEM : r;
+        }
+        else if (pfd.revents & POLLNVAL) {
+            errno = EBADF;
+            r = EAI_SYSTEM;
+        }
+        else {
+            NETLOG_DBG("This should never happen! (r=%zd, revents=0x%04X)",
+                        r, (unsigned)pfd.revents);
+            errno = EIO;
+            r = EAI_SYSTEM;
         }
-        r = r < 0 ? EAI_SYSTEM : r;
     }
     else if (r == 0) {
         errno = ETIME;
@@ -361,16 +377,6 @@ ssize_t sendto_tm(int fd, void *buf, size_t len, int flags,
     else if (r < 0) {
         r = EAI_SYSTEM;
     }
-    else if (pfd.revents & POLLNVAL) {
-        errno = EBADF;
-        r = EAI_SYSTEM;
-    }
-    else {
-        NETLOG_DBG("This should never happen! (r=%zd, revents=0x%04X)",
-                    r, (unsigned)pfd.revents);
-        errno = EIO;
-        r = EAI_SYSTEM;
-    }
     if (r < 0) {
         NETLOG_ERR(r, "send_tm(%d)", fd);
     }