Commit c5e79b5d authored by Matthew Wilkes's avatar Matthew Wilkes

Detect IPv6 hosts and use the appropriate address family.

parent 847f1c77
......@@ -542,7 +542,12 @@ class http_server (asyncore.dispatcher):
self.ip = ip
self.port = port
asyncore.dispatcher.__init__ (self)
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
if ':' in ip:
socket_type = socket.AF_INET6
else:
socket_type = socket.AF_INET
self.create_socket (socket_type, socket.SOCK_STREAM)
self.handlers = []
......@@ -555,7 +560,10 @@ class http_server (asyncore.dispatcher):
# lower this to 5 if your OS complains
self.listen (1024)
host, port = self.socket.getsockname()
name = self.socket.getsockname()
host = name[0]
port = name[1]
if not ip:
self.log_info('Computing default hostname', 'warning')
try:
......
......@@ -134,6 +134,22 @@ class ZServerConfigurationTestCase(BaseTest, WarningInterceptor):
self.assertEqual(server.port, 9381)
server.close()
def test_http_over_ipv6(self):
factory = self.load_factory("""\
<http-server>
address [::1]:81
</http-server>
""")
self.assert_(isinstance(factory,
ZServer.datatypes.HTTPServerFactory))
self.assertEqual(factory.host, "::1")
self.assertEqual(factory.port, 81)
self.check_prepare(factory)
server = factory.create()
self.assertEqual(server.ip, '::1')
self.assertEqual(server.port, 9381)
server.close()
def test_http_factory_defaulthost(self):
factory = self.load_factory("""\
<http-server>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment