[Patch #982681] Apply this patch correctly; makes set_reuse_addr() work on Windows
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index f63a83e..5f60219 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -263,14 +263,20 @@
def set_reuse_addr(self):
# try to re-use a server port if possible
try:
+ # Windows SO_REUSEADDR is very broken (from a unixy perspective)
+ if sys.platform == 'win32':
+ reuse_constant = socket.SO_EXCLUSIVEADDRUSE
+ else:
+ reuse_constant = socket.SO_REUSEADDR
+
self.socket.setsockopt(
- socket.SOL_SOCKET, socket.SO_REUSEADDR,
+ socket.SOL_SOCKET, reuse_constant,
self.socket.getsockopt(socket.SOL_SOCKET,
- socket.SO_REUSEADDR) | 1
+ reuse_constant) | 1
)
except socket.error:
pass
-
+
# ==================================================
# predicates for select()
# these are used as filters for the lists of sockets