X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=net.c;h=a95f145a78ac111416201aebe4b1f628e2a73544;hb=39e1307682cb23c0007280a8a823d3017808f207;hp=205041fdaec3881c4196d3d7bada084036fea3bf;hpb=63a8840ff755de24d7a205f7ccc07ad0c68dc844;p=paraslash.git diff --git a/net.c b/net.c index 205041fd..a95f145a 100644 --- 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; } /* 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))