]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - net.c
net: Change makesock_addrinfo() to set given flowopts before SO_REUSEADDR.
[paraslash.git] / net.c
diff --git a/net.c b/net.c
index d00895f50342a528f9e6008e886c766a8808820e..a95f145a78ac111416201aebe4b1f628e2a73544 100644 (file)
--- a/net.c
+++ b/net.c
@@ -440,6 +440,7 @@ static int makesock_addrinfo(unsigned l4type, bool passive, struct addrinfo *ai,
                if (ret < 0)
                        goto get_next_dst;
                sockfd = ret;
+               flowopt_setopts(sockfd, fo);
                /*
                 * Reuse the address on passive sockets to avoid failure on
                 * restart (protocols using listen()) and when creating
@@ -453,19 +454,18 @@ static int makesock_addrinfo(unsigned l4type, bool passive, struct addrinfo *ai,
                                para_strerror(-ret));
                        break;
                }
-               flowopt_setopts(sockfd, fo);
 
-               if (src) {
+               if (passive) {
                        if (bind(sockfd, src->ai_addr, src->ai_addrlen) < 0) {
                                close(sockfd);
                                goto get_next_src;
                        }
-                       if (!dst) /* bind-only completed successfully */
-                               break;
+                       /* bind completed successfully */
+                       break;
+               } else {
+                       if (connect(sockfd, dst->ai_addr, dst->ai_addrlen) == 0)
+                               break; /* connection completed successfully */
                }
-
-               if (dst && connect(sockfd, dst->ai_addr, dst->ai_addrlen) == 0)
-                       break; /* connection completed successfully */
                close(sockfd);
 get_next_dst:
                if (dst && (dst = dst->ai_next))