Don't leak socket on setsockopt() errors
diff --git a/common/network/TcpSocket.cxx b/common/network/TcpSocket.cxx
index f51873c..9ac1478 100644
--- a/common/network/TcpSocket.cxx
+++ b/common/network/TcpSocket.cxx
@@ -443,8 +443,11 @@
memcpy (&sa, listenaddr, listenaddrlen);
#ifdef IPV6_V6ONLY
if (listenaddr->sa_family == AF_INET6) {
- if (setsockopt (sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&one, sizeof(one)))
- throw SocketException("unable to set IPV6_V6ONLY", errorNumber);
+ if (setsockopt (sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&one, sizeof(one))) {
+ int e = errorNumber;
+ closesocket(sock);
+ throw SocketException("unable to set IPV6_V6ONLY", e);
+ }
}
#endif /* defined(IPV6_V6ONLY) */