aboutsummaryrefslogtreecommitdiffstats
path: root/common/network/TcpSocket.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'common/network/TcpSocket.cxx')
-rw-r--r--common/network/TcpSocket.cxx7
1 files changed, 6 insertions, 1 deletions
diff --git a/common/network/TcpSocket.cxx b/common/network/TcpSocket.cxx
index 99895ad8..1ebaeecb 100644
--- a/common/network/TcpSocket.cxx
+++ b/common/network/TcpSocket.cxx
@@ -440,10 +440,15 @@ TcpListener::TcpListener(const struct sockaddr *listenaddr,
}
#endif /* defined(IPV6_V6ONLY) */
-#ifndef WIN32
+#ifdef FD_CLOEXEC
// - By default, close the socket on exec()
fcntl(sock, F_SETFD, FD_CLOEXEC);
+#endif
+ // SO_REUSEADDR is broken on Windows. It allows binding to a port
+ // that already has a listening socket on it. SO_EXCLUSIVEADDRUSE
+ // might do what we want, but requires investigation.
+#ifndef WIN32
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
(char *)&one, sizeof(one)) < 0) {
int e = errorNumber;