2013-03-06 1 views
35

私はPythonを初めて使い、Core Python Applications 3rd Editionを読んでいます。これは最初の例であり、すでに私はそれに困惑しています。最後にエラーのあるコードがあります。 #1の/ usr/binに/のenv pythonのこの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 

これは何を意味するのでしょうか?

答えて

14

HOST = ' ' 

HOST = '' 

を(引用符の間すなわちスペースなし)読んでください。

エラーが発生する理由は、' 'が有効なホスト名ではないことです。この文脈では、''は特別な意味を持ちます(基本的には「すべてのローカルアドレス」を意味します)。

31

これは、指定したホスト名' 'が無効であることを示します(gaiはgetaddrinfo()を表します)。

NPEは既に述べているとおり、空の文字列''がスペース' 'よりも適切かもしれません。

+3

この回答は、小さなTCPエコーサーバで 'HOST = '''と書いていない人、つまりOP以外のすべての人にとって、より役に立ちます。私は、例えば、 - 私はちょうどこれがどんな種類の例外だったのか知りたかっただけです。 'gai'の意味を説明してくれてありがとう。 –

関連する問題