]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - net.c
net: Let makesock() continue on setsockopt() failure.
[paraslash.git] / net.c
diff --git a/net.c b/net.c
index 94610a84e2a3aa6b42ad9d5c11dbc03bc69cb306..822f70def6aee8f6cf6e202832ab02c4553628b8 100644 (file)
--- a/net.c
+++ b/net.c
@@ -430,36 +430,29 @@ static int makesock_addrinfo(unsigned l4type, bool passive, struct addrinfo *ai,
                        continue;
                sockfd = ret;
                flowopt_setopts(sockfd, fo);
-               if (passive) {
-                       /*
-                        * Reuse the address on passive sockets to avoid
-                        * failure on restart (protocols using listen()) and
-                        * when creating multiple listener instances (UDP
-                        * multicast).
-                        */
-                       if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on,
-                                       sizeof(on)) == -1) {
-                               ret = -ERRNO_TO_PARA_ERROR(errno);
-                               close(sockfd);
-                               PARA_ERROR_LOG("can not set SO_REUSEADDR: %s\n",
-                                       para_strerror(-ret));
-                               break;
-                       }
-                       if (bind(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
-                               close(sockfd);
-                               continue;
-                       }
-                       /* bind completed successfully */
-                       break;
-               } else {
+               if (!passive) {
                        if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) == 0)
-                               break; /* connection completed successfully */
+                               return sockfd;
+                       close(sockfd);
+                       continue;
+               }
+               /*
+                * Reuse the address on passive sockets to avoid failure on
+                * restart (protocols using listen()) and when creating
+                * multiple listener instances (UDP multicast).
+                */
+               if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on,
+                               sizeof(on)) == -1) {
+                       close(sockfd);
+                       continue;
+               }
+               if (bind(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
+                       close(sockfd);
+                       continue;
                }
-               close(sockfd);
+               return sockfd;
        }
-       if (!ai)
-               return ret < 0? ret : -E_MAKESOCK;
-       return sockfd;
+       return -E_MAKESOCK;
 }
 
 /**