diff --git a/mongoose.c b/mongoose.c index e5ae42a3b70011bdd5badfe81debdd94119179c8..d567f74970e5a75e5bcfdab01f5c744505cf862b 100644 --- a/mongoose.c +++ b/mongoose.c @@ -548,6 +548,12 @@ static sock_t ns_open_listening_socket(union socket_address *sa) { if ((sock = socket(sa->sa.sa_family, SOCK_STREAM, 6)) != INVALID_SOCKET && #ifndef _WIN32 + // SO_RESUSEADDR is not enabled on Windows because the semantics of + // SO_REUSEADDR on UNIX and Windows is different. On Windows, + // SO_REUSEADDR allows to bind a socket to a port without error even if + // the port is already open by another program. This is not the behavior + // SO_REUSEADDR was designed for, and leads to hard-to-track failure + // scenarios. Therefore, SO_REUSEADDR was disabled on Windows. !setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *) &on, sizeof(on)) && #endif !bind(sock, &sa->sa, sa->sa.sa_family == AF_INET ?