diff -ur pygopherd/pygopherd/initialization.py pygopherd-ipv6/pygopherd/initialization.py --- pygopherd/pygopherd/initialization.py 2006-09-11 16:10:13.000000000 +0200 +++ pygopherd-ipv6/pygopherd/initialization.py 2015-12-27 18:03:42.163583558 +0100 @@ -101,6 +101,12 @@ def server_bind(self): """Override server_bind to store server name.""" + if self.address_family == socket.AF_INET6: + if self.server_address[0] in ('', '::', '::0', '::0.0.0.0'): + self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY,0) + else: + self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY,1) + servertype.server_bind(self) # Set a timeout. @@ -111,7 +117,7 @@ self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDTIMEO, mytimeout) #self.socket.settimeout(int(config.get('pygopherd', 'timeout'))) - host, port = self.socket.getsockname() + host, port = self.socket.getsockname()[0:2] if config.has_option("pygopherd", "servername"): self.server_name = config.get("pygopherd", "servername") else: @@ -121,6 +127,9 @@ else: self.server_port = port + class MyServer6(MyServer): + address_family = socket.AF_INET6 + # Instantiate a server. Has to be done before the security so we can # get a privileged port if necessary. @@ -130,8 +139,11 @@ interface = config.get('pygopherd', 'interface') try: - s = MyServer((interface, config.getint('pygopherd', 'port')), - GopherRequestHandler) + port = config.getint('pygopherd', 'port') + if interface == '' or ':' in interface: + s = MyServer6((interface, port), GopherRequestHandler) + else: + s = MyServer((interface, port), GopherRequestHandler) except: GopherExceptions.log(sys.exc_info()[1], None, None) logger.log("Application startup NOT successful!")