socket.getaddrinfo在一台机器上失败;适用于另一个明显相同的人。为什么?

时间:2010-07-15 22:06:02

标签: python sockets networking

我有一台笔记本电脑和一台台式机,都运行Ubuntu 10.04,都运行Ubuntu附带的Python 2.6.5。

在笔记本电脑上,以下程序

#!/usr/bin/env python
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分开了,看不出有什么区别,除了笔记本电脑有这个子句

# The primary network interface
auto eth0
iface eth0 inet dhcp

......再一次,这让我感到无关紧要。

::

如果你想要一些上下文:我的Python程序正在尝试发送电子邮件,而且它是最终调用getaddrinfo的电子邮件软件。

1 个答案:

答案 0 :(得分:1)

在不起作用的框中查看/etc/hosts。 localhost是否有条目?
还要比较/etc/nsswitch.conf并查看是否有任何可疑内容,例如缺少“主机”行