mirror of https://github.com/python/cpython
Prevent hang if the port cannot be opened.
This commit is contained in:
parent
5c9a81a3d8
commit
fdffca27c1
|
@ -47,6 +47,7 @@ class LoopbackHttpServerThread(threading.Thread):
|
||||||
self._port = port
|
self._port = port
|
||||||
self._server_address = ('127.0.0.1', self._port)
|
self._server_address = ('127.0.0.1', self._port)
|
||||||
self.ready = threading.Event()
|
self.ready = threading.Event()
|
||||||
|
self.error = None
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""Stops the webserver if it's currently running."""
|
"""Stops the webserver if it's currently running."""
|
||||||
|
@ -59,12 +60,18 @@ class LoopbackHttpServerThread(threading.Thread):
|
||||||
def run(self):
|
def run(self):
|
||||||
protocol = "HTTP/1.0"
|
protocol = "HTTP/1.0"
|
||||||
|
|
||||||
self._RequestHandlerClass.protocol_version = protocol
|
try:
|
||||||
httpd = LoopbackHttpServer(self._server_address,
|
self._RequestHandlerClass.protocol_version = protocol
|
||||||
self._RequestHandlerClass)
|
httpd = LoopbackHttpServer(self._server_address,
|
||||||
|
self._RequestHandlerClass)
|
||||||
|
|
||||||
sa = httpd.socket.getsockname()
|
sa = httpd.socket.getsockname()
|
||||||
#print "Serving HTTP on", sa[0], "port", sa[1], "..."
|
#print "Serving HTTP on", sa[0], "port", sa[1], "..."
|
||||||
|
except:
|
||||||
|
# Fail "gracefully" if we are unable to start.
|
||||||
|
self.ready.set()
|
||||||
|
self.error = sys.exc_info()[1]
|
||||||
|
raise
|
||||||
|
|
||||||
self.ready.set()
|
self.ready.set()
|
||||||
while not self._stop:
|
while not self._stop:
|
||||||
|
@ -241,6 +248,8 @@ class ProxyAuthTests(unittest.TestCase):
|
||||||
self.server = LoopbackHttpServerThread(self.PORT, FakeProxyHandler)
|
self.server = LoopbackHttpServerThread(self.PORT, FakeProxyHandler)
|
||||||
self.server.start()
|
self.server.start()
|
||||||
self.server.ready.wait()
|
self.server.ready.wait()
|
||||||
|
if self.server.error:
|
||||||
|
raise self.server.error
|
||||||
|
|
||||||
handler = urllib2.ProxyHandler({"http" : self.PROXY_URL})
|
handler = urllib2.ProxyHandler({"http" : self.PROXY_URL})
|
||||||
self._digest_auth_handler = urllib2.ProxyDigestAuthHandler()
|
self._digest_auth_handler = urllib2.ProxyDigestAuthHandler()
|
||||||
|
|
Loading…
Reference in New Issue