From f77fd1eca9b09d842981a650151d36b75f0a8cf0 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Sat, 11 Nov 2017 16:27:33 -0800 Subject: [PATCH] Set SO_EXCLUSIVEADDRUSE for server sockets on Windows. (#44) On Windows, the shutdown() call relies on exclusively owning the server socket. --- src/main/native/cpp/tcpsockets/TCPAcceptor.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/native/cpp/tcpsockets/TCPAcceptor.cpp b/src/main/native/cpp/tcpsockets/TCPAcceptor.cpp index db5d608722..64b6554eb7 100644 --- a/src/main/native/cpp/tcpsockets/TCPAcceptor.cpp +++ b/src/main/native/cpp/tcpsockets/TCPAcceptor.cpp @@ -99,8 +99,13 @@ int TCPAcceptor::start() { } address.sin_port = htons(m_port); +#ifdef _WIN32 + int optval = 1; + setsockopt(m_lsd, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char*)&optval, sizeof optval); +#else int optval = 1; setsockopt(m_lsd, SOL_SOCKET, SO_REUSEADDR, (char*)&optval, sizeof optval); +#endif int result = bind(m_lsd, (struct sockaddr*)&address, sizeof(address)); if (result != 0) {