代码之家  ›  专栏  ›  技术社区  ›  offby1

socket.getaddrinfo在一台机器上失败;在另一台显然相同的机器上工作。为什么?

  •  1
  • offby1  · 技术社区  · 14 年前

    我有一台笔记本电脑和一台台式机,都在运行Ubuntu10.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 回复  |  直到 14 年前
        1
  •  1
  •   unbeli    14 年前

    检查 /etc/hosts 在它不工作的盒子上。有本地主机的条目吗?
    还比较 /etc/nsswitch.conf 看看有没有什么可疑的地方,比如缺少“主机”线路