New submission from Michael Rich <richmr2...@gmail.com>:

Hi, a web server can be incorrectly bound to an already in-use socket when 
binding a HTTPServer on windows.  The issue is discussed here:  
https://stackoverflow.com/questions/51090637/running-a-python-web-server-twice-on-the-same-port-on-windows-no-port-already

This only happens on Windows.  In *nix the socketserver will throw an error, on 
Windows it will not.  However the most recently bound server will not receive 
the requests.

I suggest the following code (taken from stackoverflow) at the start of the 
server_bind method:

if hasattr(socket, 'SO_EXCLUSIVEADDRUSE'):
            self.socket.setsockopt(socket.SOL_SOCKET, 
socket.SO_EXCLUSIVEADDRUSE, 1)
            # Also need to change the value of allow_reuse_address (defined in 
http.server.HTTPServer)
            HTTPServer.allow_reuse_address = 0


I have tested this and it will throw an error upon reuse in Windows and does 
not change *nix behavior.

Thanks,

Mike

----------
components: Library (Lib)
messages: 372451
nosy: Michael Rich
priority: normal
severity: normal
status: open
title: Suggested change to http.server.HTTPServer to prevent socket reuse in 
Windows
type: behavior
versions: Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue41135>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to