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['SERVER_PROTOCOL'] = 'HTTP/1.0'
|
||||
|
||||
host, port = self.request.getsockname()
|
||||
host, port = self.request.getsockname()[:2]
|
||||
env['SERVER_NAME'] = host
|
||||
env['SERVER_PORT'] = str(port)
|
||||
env['REMOTE_ADDR'] = self.client_address[0]
|
||||
@@ -569,7 +569,7 @@ def server(sock, site,
|
||||
else:
|
||||
pool = greenpool.GreenPool(max_size)
|
||||
try:
|
||||
host, port = sock.getsockname()
|
||||
host, port = sock.getsockname()[:2]
|
||||
port = ':%s' % (port, )
|
||||
if hasattr(sock, 'do_handshake'):
|
||||
scheme = 'https'
|
||||
|
@@ -1138,7 +1138,26 @@ class TestChunkedInput(_TestBase):
|
||||
|
||||
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__':
|
||||
main()
|
||||
|
Reference in New Issue
Block a user