diff mercurial/hgweb/server.py @ 3631:dc3504af7722

hgweb: internalize some socket details
author Matt Mackall <mpm@selenic.com>
date Mon, 13 Nov 2006 13:26:57 -0600
parents 3207e30bf468
children eb0b4a2d70a9
line wrap: on
line diff
--- a/mercurial/hgweb/server.py
+++ b/mercurial/hgweb/server.py
@@ -200,6 +200,16 @@ def create_server(ui, repo):
             self.reqmaker = wsgiapplication(self.make_handler)
             self.daemon_threads = True
 
+            addr, port = self.socket.getsockname()
+            if addr == '0.0.0.0':
+                addr = socket.gethostname()
+            else:
+                try:
+                    addr = socket.gethostbyaddr(addr)[0]
+                except socket.error:
+                    pass
+            self.addr, self.port = addr, port
+
         def make_handler(self):
             if self.webdir_conf:
                 hgwebobj = self.webdirmaker(self.webdir_conf)
@@ -219,7 +229,10 @@ def create_server(ui, repo):
                 raise hg.RepoError(_('IPv6 not available on this system'))
             super(IPv6HTTPServer, self).__init__(*args, **kwargs)
 
-    if use_ipv6:
-        return IPv6HTTPServer((address, port), _hgwebhandler)
-    else:
-        return MercurialHTTPServer((address, port), _hgwebhandler)
+    try:
+        if use_ipv6:
+            return IPv6HTTPServer((address, port), _hgwebhandler)
+        else:
+            return MercurialHTTPServer((address, port), _hgwebhandler)
+    except socket.error, inst:
+        raise util.Abort(_('cannot start server: %s') % inst.args[1])