Stop wsgi server from blowing up when given an ipv6 socket
This commit is contained in:
@@ -417,7 +417,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
env['CONTENT_LENGTH'] = length
|
env['CONTENT_LENGTH'] = length
|
||||||
env['SERVER_PROTOCOL'] = 'HTTP/1.0'
|
env['SERVER_PROTOCOL'] = 'HTTP/1.0'
|
||||||
|
|
||||||
host, port = self.request.getsockname()
|
host, port = self.request.getsockname()[:2]
|
||||||
env['SERVER_NAME'] = host
|
env['SERVER_NAME'] = host
|
||||||
env['SERVER_PORT'] = str(port)
|
env['SERVER_PORT'] = str(port)
|
||||||
env['REMOTE_ADDR'] = self.client_address[0]
|
env['REMOTE_ADDR'] = self.client_address[0]
|
||||||
@@ -569,7 +569,7 @@ def server(sock, site,
|
|||||||
else:
|
else:
|
||||||
pool = greenpool.GreenPool(max_size)
|
pool = greenpool.GreenPool(max_size)
|
||||||
try:
|
try:
|
||||||
host, port = sock.getsockname()
|
host, port = sock.getsockname()[:2]
|
||||||
port = ':%s' % (port, )
|
port = ':%s' % (port, )
|
||||||
if hasattr(sock, 'do_handshake'):
|
if hasattr(sock, 'do_handshake'):
|
||||||
scheme = 'https'
|
scheme = 'https'
|
||||||
|
@@ -1138,7 +1138,26 @@ class TestChunkedInput(_TestBase):
|
|||||||
|
|
||||||
assert not got_signal, "caught alarm signal. infinite loop detected."
|
assert not got_signal, "caught alarm signal. infinite loop detected."
|
||||||
|
|
||||||
|
def test_ipv6(self):
|
||||||
|
try:
|
||||||
|
sock = eventlet.listen(('::1', 0), family=socket.AF_INET6)
|
||||||
|
except (socket.gaierror, socket.error): # probably no ipv6
|
||||||
|
return
|
||||||
|
log = StringIO()
|
||||||
|
# first thing the server does is try to log the IP it's bound to
|
||||||
|
def run_server():
|
||||||
|
try:
|
||||||
|
server = wsgi.server(sock=sock, log=log, site=Site())
|
||||||
|
except ValueError:
|
||||||
|
log.write('broked')
|
||||||
|
eventlet.spawn_n(run_server)
|
||||||
|
logval = log.getvalue()
|
||||||
|
while not logval:
|
||||||
|
eventlet.sleep(0.0)
|
||||||
|
logval = log.getvalue()
|
||||||
|
if 'broked' in logval:
|
||||||
|
self.fail('WSGI server raised exception with ipv6 socket')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
Reference in New Issue
Block a user