X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=net.c;h=b7806a18e075f091c87611b0c64e43bdf711500b;hp=28d11d664c937404e034d65760c00e5fa8cc1a3a;hb=5775c2a87e53a8214be1a57c50cb3506166b4f83;hpb=c9a917fe5862bb042e36de84685b5c0fafa7f0eb diff --git a/net.c b/net.c index 28d11d66..b7806a18 100644 --- a/net.c +++ b/net.c @@ -430,31 +430,30 @@ 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)); - return ret; - } - if (bind(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) { - close(sockfd); - continue; - } - return sockfd; - } else { + if (!passive) { if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) == 0) 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) { + ret = -ERRNO_TO_PARA_ERROR(errno); + close(sockfd); + PARA_ERROR_LOG("can not set SO_REUSEADDR: %s\n", + para_strerror(-ret)); + return ret; + } + if (bind(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) { + close(sockfd); + continue; } + return sockfd; } return -E_MAKESOCK; }