From 056c153209fea793ce00986cf102a5b587e28369 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Thu, 23 Apr 2015 11:30:59 +0200 Subject: [PATCH] Clarify Windows SO_REUSEADDR exception --- common/network/TcpSocket.cxx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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; -- 2.39.5