我试图在Python 2应用程序中启用IPv6,并且遇到了麻烦。无论何时我尝试绑定到IPv6套接字,都会引发一个socket.error: getsockaddrarg: bad family
异常。我可以简单地做重现错误:Python 2和IPv6
import socket
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.bind(('', 12345))
此代码工作正常,如果我在Python 3运行。不幸的是,剧本需要一个显著的移植工作在Python 3工作,我宁愿没有这样做那呢。
我需要做些什么来获得IPv6在Python 2中的工作还是我S-O-L?
详情: 的Python 2.6.2(r262:71600,2009年10月24日,3时16分31秒) [GCC 4.4.1 [GCC-4_4-分支修订150839]在linux2上 (这是Python的那标准openSUSE 11.2安装的一部分)。
更新
后AndiDog帮我弄清楚,socket.AF_INET6定义没有配置IPv6的即使,我发现socket.has_ipv6
。这被定义为一个布尔值并指示Python是否使用IPv6构建。
运行在FreeBSD上的Python 2.6.1没有问题。 – sberry 2010-01-15 23:19:29
它可以在*非常相同的操作系统或另一个操作系统上使用Python 3吗? – AndiDog 2010-01-15 23:22:22
@AndiDog - 是的,它可以在同一个操作系统上运行在Python 3上。在一个shell(如此相同的环境)中,如果我运行'python2。/ script',我得到异常,然后如果我运行'python3。/ script',我不会。 – 2010-01-15 23:26:37