summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/asyncore.py12
1 files changed, 9 insertions, 3 deletions
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 @@ 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