【发布时间】:2010-07-15 22:06:01
【问题描述】:
我有一台笔记本电脑和一台台式机,都运行 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 的是电子邮件软件。
【问题讨论】:
-
“ping localhost”在两者上都能正常工作吗?
-
要检查的其他文件:
/etc/services和/etc/resolv.conf。 -
我也有同样的问题:stackoverflow.com/q/32008965/936293。问题机器的 /etc/resolv.conf 的第一行是 192.168.80.254(家庭路由器),第二行是 ISP 的 DNS 服务器。
dig表明对 192.168.80.254 的请求运行良好,但getaddrinfo不会。如果我交换 /etc/resolv.conf 中的两行,它可以工作,但在每次 DHCP 刷新时,它都会被重置。令人沮丧。有什么建议吗?
标签: python sockets networking