From 5336f8caa4ed6d3777183f8b0ab1fc81db3eec3d Mon Sep 17 00:00:00 2001 From: "Andrew M. Kuchling" Date: Thu, 15 Jul 2004 16:17:07 +0000 Subject: [PATCH] [Patch #982681] Apply this patch correctly; makes set_reuse_addr() work on Windows --- Lib/asyncore.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Lib/asyncore.py b/Lib/asyncore.py index f63a83eebad..5f602195be5 100644 --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -263,14 +263,20 @@ class dispatcher: 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