diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp index d9816200fa5a39b2f6b5a4c588039843221cca6b..8f5a60d081665a05485cc2144c8e30f453ef5291 100644 --- a/src/dhtrunner.cpp +++ b/src/dhtrunner.cpp @@ -378,25 +378,22 @@ int bindSocket(const SockAddr& addr, SockAddr& bound) { bool is_ipv6 = addr.getFamily() == AF_INET6; int sock = socket(is_ipv6 ? PF_INET6 : PF_INET, SOCK_DGRAM, 0); - if (sock >= 0) { - int set = 1; + if (sock < 0) + throw DhtException(std::string("Can't open socket: ") + strerror(sock)); + int set = 1; #ifdef SO_NOSIGPIPE - setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(set)); + setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(set)); #endif - if (is_ipv6) - setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&set, sizeof(set)); - int rc = bind(sock, addr.get(), addr.getLength()); - if(rc < 0) - throw DhtException("Can't bind socket on " + addr.toString() + " " + strerror(rc)); - sockaddr_storage ss; - socklen_t ss_len = sizeof(ss); - getsockname(sock, (sockaddr*)&ss, &ss_len); - bound = {ss, ss_len}; - return sock; - } else { - throw DhtException(std::string("Can't open socket: ") + strerror(sock)); - } - return -1; + if (is_ipv6) + setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&set, sizeof(set)); + int rc = bind(sock, addr.get(), addr.getLength()); + if(rc < 0) + throw DhtException("Can't bind socket on " + addr.toString() + " " + strerror(rc)); + sockaddr_storage ss; + socklen_t ss_len = sizeof(ss); + getsockname(sock, (sockaddr*)&ss, &ss_len); + bound = {ss, ss_len}; + return sock; } void