Python 2和IPv6

2024-06-25 06:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python2应用程序中启用IPv6,但遇到了问题。每当我尝试绑定到IPv6套接字时,都会引发socket.error: getsockaddrarg: bad family异常。我可以简单地复制错误:

import socket

s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.bind(('', 12345))

如果我在Python 3中运行,那么这段代码可以正常工作。不幸的是,要在Python 3中工作,脚本需要大量的移植工作,我宁愿现在还不这样做。

为了让IPv6在Python 2中工作,我需要做些什么吗?或者我是S-O-L?

详细信息: Python2.6.2(r262:71600,2009年10月24日,03:16:31) 关于linux2的[GCC 4.4.1[GCC-4 U 4-分支版本150839]] (这是标准openSUSE 11.2安装中的Python)。

更新

在AndiDog帮助我弄清楚socket.AF_INET6是在没有配置IPv6的情况下定义的之后,我发现了socket.has_ipv6。这被定义为布尔值,并指示Python是否是使用IPv6构建的。


Tags: import应用程序stream错误errorsocketfamilysock
3条回答

好的,下面是评论的答案:

似乎Python没有配置--enable-ipv6

这不应该是操作系统的问题,因为Python 3可以工作。即使操作系统不支持IPv6,似乎socket.AF_INET6总是可用的(如果它是在操作系统头文件中定义的)。Cf.socketmodule.c,第4433行(在当前的Python 2.6.4源代码中)。

在我的Mac(Mac OS X 10.5.8)上使用2.6.4很好——不幸的是,我不能降级到2.6.2,也没有任何openSUSE来检查这个bug是从哪里来的。你能试着从源代码中获取2.6.4并构建来查看bug是否消失,或者检查一些openSUSE特有的bug跟踪器。。。?至少我们知道它不是一个通用的Python2.6 bug(至少是最新的,bug修复版的2.6)。。。

听起来好像那个特定的Python不是用IPv6支持编译的。

在这种情况下,您可以下载该版本的源代码,并为自己构建一个可以工作的兼容Python。您甚至可以在Debian包中进行一些编辑并升级系统python。

相关问题 更多 >