我有一台笔记本电脑和一台台式机,都在运行Ubuntu10.04,都在运行Ubuntu附带的标准python 2.6.5。
在笔记本电脑上,以下程序
import socket
print(socket.getaddrinfo("localhost", 8025, 0, socket.SOCK_STREAM))
有效——也就是说,它可以打印出一些东西而不会出错。
事实上,事情是:
[(10, 1, 6, '', ('::1', 8025, 0, 0)), (2, 1, 6, '', ('127.0.0.1', 8025))]
(这是一组ipv6数据和一组ipv4数据。)
但是,在另一个框中,相同的程序执行以下操作:
Traceback (most recent call last):
File "socktest.py", line 5, in <module>
print(socket.getaddrinfo("localhost", 8025, 0, socket.SOCK_STREAM))
socket.gaierror: [Errno -2] Name or service not known
为什么?
笔记本电脑是x86(即32位),而台式电脑是x86_64,但如果这很重要,我会感到惊讶。笔记本电脑也有两个网络接口(无线和有线),而桌面电脑只是有线的;我再次怀疑这是否相关。根据“ifconfig”,所有三个接口都绑定到ipv6地址。我对这两个盒子上的/etc/network进行了区分,除了笔记本电脑有这个条款外,没有发现任何区别。
auto eth0
iface eth0 inet dhcp
…我又一次觉得这无关紧要。
::
如果您需要一些上下文:我的python程序正试图发送电子邮件,而最终调用getaddrinfo的是电子邮件软件。