У меня есть ноутбук и настольный компьютер, оба работают под управлением Ubuntu 10.04, оба работают на стандартном Python 2.6.5, который поставляется с Ubuntu.
На ноутбуке установлена следующая программа
#!/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, но я был бы удивлен, если это имело значение. Ноутбук также имеет два сетевых интерфейса (беспроводной и проводной), тогда как рабочий стол только что подключен; опять сомневаюсь что это актуально. Все три интерфейса были связаны с IPv6-адресами, согласно «ifconfig». Я обнаружил / etc / network на двух коробках и не увидел никакой разницы, за исключением того, что на ноутбуке есть этот пункт
# The primary network interface
auto eth0
iface eth0 inet dhcp
... что опять-таки кажется мне неуместным.
::
Если вам нужен какой-то контекст: моя программа на Python пытается отправить электронную почту, и именно программное обеспечение электронной почты в конечном счете вызывает getaddrinfo.