我正在尝试在Python 2应用程序中启用IPv6,但遇到了麻烦。每当我尝试绑定到IPv6套接字时,都会抛出一个“socket.error: getsockaddrarg: bad family”异常。我可以通过简单地执行以下操作来重现此错误:
import socket
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.bind(('', 12345))
如果我在Python 3中运行此代码,它可以正常工作。不幸的是,为了让脚本在Python 2中工作,需要进行相当大的移植工作,而我不想现在这样做。
我需要做些什么才能让IPv6在Python 2中工作,还是说我没戏了?
详细信息: Python 2.6.2(r262:71600,2009年10月24日,03:16:31) [Linux2上的GCC 4.4.1 [gcc-4_4-branch修订版150839]](它是标准openSUSE 11.2安装的Python)。
更新
在AndiDog帮助我弄清楚即使未配置IPv6,socket.AF_INET6也会被定义后,我发现 socket.has_ipv6
。这被定义为布尔值,并指示Python是否构建了IPv6。
socket.AF_INET6
总是可用的(如果在操作系统头文件中定义)。请查看 socketmodule.c,第 ~4433 行。 - AndiDog