Что означает этот socket.gaierror?

Я новичок в python и просматриваю книгу Core Python Applications 3rd Edition. Это первый пример и я уже в тупике. Вот код с ошибкой в ​​конце.

#!/usr/bin/env python

from socket import *
from time import ctime

HOST = ' '
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

    while True:
        print 'waiting for connection...'
        tcpCliSock, addr = tcpSerSock.accept()
        print "...connected from:", addr

        while True:
        data = tcpCliSock.recv(BUFSIZ)
        if not data:
            break
        tcpCliSock.send("[%s] %s" % (ctime(), data))

    tcpCliSock.close()
tcpSerSock.close()

Traceback (most recent call last):
  File "tsTserv.py", line 12, in <module>
    tcpSerSock.bind(ADDR)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
socket.gaierror: [Errno 8] nodename nor servname provided, or not known

Что это значит?


person user2139635    schedule 06.03.2013    source источник


Ответы (2)


Это означает, что данное вами имя хоста ' ' недействительно (gai означает getaddrinfo()).

Как уже утверждает NPE, возможно, пустая строка '' будет более подходящей, чем пробел ' '.

person glglgl    schedule 06.03.2013
comment
Этот ответ более полезен для всех, кроме ОП, то есть людей, которые не написали HOST = ' ' на своем маленьком эхо-сервере TCP. Я, например, просто хотел узнать, что это за исключение. Так что спасибо за объяснение, что означает gai. - person Tomasz Gandor; 11.09.2014

HOST = ' '

должен прочесть

HOST = ''

(т.е. без пробела между кавычками).

Причина, по которой вы получаете сообщение об ошибке, заключается в том, что ' ' не является допустимым именем хоста. В этом контексте '' имеет особое значение (в основном это означает «все локальные адреса»).

person NPE    schedule 06.03.2013