SVN: Zope/trunk/src/ZServer/ Detect IPv6 hosts and use the appropriate address family.

Matthew Wilkes <[email protected]>
Newsgroups gmane.comp.web.zope.cvs
Message-ID <[email protected]>
Log message for revision 121036:
  Detect IPv6 hosts and use the appropriate address family.

Changed:
  U   Zope/trunk/src/ZServer/medusa/http_server.py
  U   Zope/trunk/src/ZServer/tests/test_config.py

-=-
Modified: Zope/trunk/src/ZServer/medusa/http_server.py
===================================================================
--- Zope/trunk/src/ZServer/medusa/http_server.py	2011-03-18 15:15:00 UTC (rev 121035)
+++ Zope/trunk/src/ZServer/medusa/http_server.py	2011-03-18 15:38:19 UTC (rev 121036)
@@ -542,8 +542,13 @@
         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 = []
         
         if not logger_object:
@@ -555,7 +560,10 @@
         # 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:

Modified: Zope/trunk/src/ZServer/tests/test_config.py
===================================================================
--- Zope/trunk/src/ZServer/tests/test_config.py	2011-03-18 15:15:00 UTC (rev 121035)
+++ Zope/trunk/src/ZServer/tests/test_config.py	2011-03-18 15:38:19 UTC (rev 121036)
@@ -134,6 +134,22 @@
         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>

_______________________________________________
Zope-Checkins maillist  -  [email protected]
https://mail.zope.org/mailman/listinfo/zope-checkins
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.