2010-07-15 73 views
1

我有一臺運行Ubuntu 10.04的筆記本電腦和臺式機,都運行Ubuntu附帶的股票Python 2.6.5。socket.getaddrinfo在一臺機器上失敗;在另一個明顯相同的作品上工作。爲什麼?

在筆記本電腦,下面的程序

#!/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 /網絡上的兩個箱子,看到沒有什麼區別,除了筆記本電腦有此條款

# The primary network interface 
auto eth0 
iface eth0 inet dhcp 

...這,再次,在我看來是無關緊要的。

::

如果你想一些背景:我的Python程序試圖發送電子郵件,並且它是最終調用的getaddrinfo電子郵件軟件。

+1

「ping localhost」在兩者上都能正常工作嗎? – bstpierre 2010-07-15 23:15:44

+1

要檢查的其他文件:'/ etc/services'和'/ etc/resolv.conf'。 – 2010-07-16 02:08:54

+0

我有完全相同的問題:http://stackoverflow.com/q/32008965/936293。問題機器的/etc/resolv.conf在第一行有192.168.80.254(家庭路由器),第二行有ISP的DNS服務器。 'dig'顯示請求192.168.80.254正常運行,但getaddrinfo'不會。如果我在/etc/resolv.conf中使用了兩行,它會起作用,但在每次DHCP刷新時都會重置。令人沮喪。有小費嗎? – 2016-01-28 04:58:41

回答

1

檢查/etc/hosts在不起作用的盒子上。本地主機是否有條目?
還比較​​,看看是否有任何可疑的東西,比如缺少'hosts'行

+0

/etc/hosts在兩個框中都是相同的,除了空格和實際主機名之外。每個都有兩個「localhost」條目:一個用於IPv4,另一個用於IPv6。 /etc/nsswitch.conf在兩個盒子上都是相同的;每個都有一個「hosts:」行。 – offby1 2010-07-15 23:01:03

+0

你可以在兩個地方使用telnet localhost 8025嗎? – unbeli 2010-07-16 06:05:55

相關問題