这个socket.gaierror是什么意思?

use*_*635 41 python tcp errno

我是python的新手,经历了一本书,Core Python Applications第3版.这是第一个例子,我已经厌倦了它.这是最后有错误的代码.#1/usr/bin/env python

#!/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
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

glg*_*lgl 38

这意味着您的主机名' '无效(gai代表getaddrinfo()).

正如NPE已经指出的那样,空字符串''可能比空格更合适' '.

  • 对于除了OP之外的所有人来说,这个答案更有用 - 那些没有在他们的小型TCP echo服务器中编写`HOST =''`的人.我举个例子 - 我只是想知道这是什么样的例外.所以,谢谢你解释'gai'代表什么. (8认同)

NPE*_*NPE 16

HOST = ' '
Run Code Online (Sandbox Code Playgroud)

应该读

HOST = ''
Run Code Online (Sandbox Code Playgroud)

(即引号之间没有空格).

您收到错误的原因是它' '不是有效的主机名.在这种情况下,''具有特殊含义(它基本上意味着"所有本地地址").