# HG changeset patch # User Patrick Mezard # Date 1171876139 -3600 # Node ID 178007785be82a428abb04815b44ba7d0926abcf # Parent e817c68edfed97d3005ce38d03f365fb37a8fc01 web/server: disable address reuse option for BaseHTTPServer on windows On windows, a socket with the SO_REUSEADDR option set is able to bind to any port, even if there's already an active socket listening on it. test-http: check server address cannot be reused. diff -r e817c68edfed -r 178007785be8 mercurial/hgweb/server.py --- a/mercurial/hgweb/server.py Mon Feb 19 10:32:46 2007 +0100 +++ b/mercurial/hgweb/server.py Mon Feb 19 10:08:59 2007 +0100 @@ -197,6 +197,11 @@ pass class MercurialHTTPServer(object, _mixin, BaseHTTPServer.HTTPServer): + + # SO_REUSEADDR has broken semantics on windows + if os.name == 'nt': + allow_reuse_address = 0 + def __init__(self, *args, **kargs): BaseHTTPServer.HTTPServer.__init__(self, *args, **kargs) self.accesslog = accesslog diff -r e817c68edfed -r 178007785be8 tests/test-http --- a/tests/test-http Mon Feb 19 10:32:46 2007 +0100 +++ b/tests/test-http Mon Feb 19 10:08:59 2007 +0100 @@ -6,6 +6,8 @@ hg commit -A -d '0 0' -m 1 hg --config server.uncompressed=True serve -p 20059 -d --pid-file=../hg1.pid hg serve -p 20060 -d --pid-file=../hg2.pid +# Test server address cannot be reused +hg serve -p 20060 2>&1 | sed -e 's/abort: cannot start server:.*/abort: cannot start server:/' cd .. cat hg1.pid hg2.pid >> $DAEMON_PIDS diff -r e817c68edfed -r 178007785be8 tests/test-http.out --- a/tests/test-http.out Mon Feb 19 10:32:46 2007 +0100 +++ b/tests/test-http.out Mon Feb 19 10:08:59 2007 +0100 @@ -1,4 +1,5 @@ adding foo +abort: cannot start server: % clone via stream streaming all changes XXX files to transfer, XXX bytes of data