socket.getaddrinfo在一台机器上失败;在另一台看似相同的机器上正常。为什么?
我有一台笔记本电脑和一台台式机,都是用的Ubuntu 10.04,里面的Python版本都是Ubuntu自带的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(64位),但我觉得这应该没什么影响。笔记本有两个网络接口(无线和有线),而台式机只有一个有线的;我也觉得这不太相关。根据“ifconfig”的信息,所有三个接口都绑定了IPv6地址。我对比了两台电脑的/etc/network文件,发现没有什么不同,除了笔记本上有这一段
# The primary network interface
auto eth0
iface eth0 inet dhcp
... 我觉得这也没什么关系。
::
如果你想知道背景:我的Python程序是想发送电子邮件,最终是邮件软件在调用getaddrinfo这个函数。
1 个回答
1
在出现问题的机器上,检查一下 /etc/hosts
文件。里面有没有关于 localhost 的记录呢?
另外,还要对比一下 /etc/nsswitch.conf
文件,看看里面有没有什么可疑的地方,比如有没有漏掉 'hosts' 这一行。