2013-03-06 23 views
35

Sono nuovo di Python e sto esaminando un libro, Core Python Applications 3rd Edition. Questo è il primo esempio e già me ne sono sconcertato. Ecco il codice con l'errore alla fine. # 1/usr/bin/env pythonChe cosa significa questo socket.gaierror?

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 

Cosa significa?

risposta

14

Il

HOST = ' ' 

dovrebbe leggere

HOST = '' 

(vale a dire senza spazio tra le virgolette).

Il motivo per cui si sta verificando l'errore è che ' ' non è un nome host valido. In questo contesto, '' ha un significato speciale (in pratica significa "tutti gli indirizzi locali").

31

Significa che il nome host specificato ' ' non è valido (gai sta per getaddrinfo()).

Come già affermato da NPE, forse una stringa vuota '' sarebbe più appropriata di uno spazio ' '.

+3

Questa risposta è più utile, per tutti tranne l'OP - cioè le persone, che non hanno scritto 'HOST = '' nel loro piccolo server echo TCP. Per esempio, volevo solo sapere che tipo di eccezione era questa. Quindi grazie per aver spiegato cosa significa 'gai'. –