我正在尝试在Python 2应用程序中启用IPv6并遇到麻烦.每当我尝试绑定到IPv6套接字时,socket.error: getsockaddrarg: bad family都会抛出异常.我只需通过执行以下操作即可重现错误:
import socket
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.bind(('', 12345))
Run Code Online (Sandbox Code Playgroud)
如果我在Python 3中运行,这段代码工作正常.不幸的是,脚本需要大量的移植工作才能在Python 3中运行,我宁愿不必这样做.
有什么我需要做的事情让IPv6在Python 2中工作或者我是SOL吗?
详细信息:Linux2上的Python 2.6.2(r262:71600,2009年10月24日,03:16:31)[GCC 4.4.1 [gcc-4_4-branch revision 150839]](它是标准openSUSE 11.2安装的Python的一部分) ).
更新
AndiDog帮我弄清楚即使没有配置IPv6也定义了socket.AF_INET6,我发现了socket.has_ipv6.这被定义为布尔值,表示Python是否使用IPv6构建.
好吧,这是评论中的答案:
好像 Python 没有配置--enable-ipv6.
这不应该是操作系统问题,因为 Python 3 可以工作。即使操作系统不支持 IPv6,它似乎也socket.AF_INET6始终可用(如果它在操作系统头文件中定义)。比照。socketmodule.c,第 4433 行(在当前的 Python 2.6.4 源代码中)。