From 203688a34b358e6e54fa44d0e1163aa21a8dbb7d Mon Sep 17 00:00:00 2001
From: Sergey Lyubka <valenok@gmail.com>
Date: Fri, 13 Jun 2014 10:19:46 +0100
Subject: [PATCH] Added comment for Win32 SO_RESUSEADDR

---
 mongoose.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/mongoose.c b/mongoose.c
index e5ae42a3b..d567f7497 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 ?
-- 
GitLab