Python 这个 socket.gaierror 是什么意思?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15246088/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 19:37:00  来源:igfitidea点击:

What does this socket.gaierror mean?

pythontcperrno

提问by user2139635

I'm new to python and going through a book, Core Python Applications 3rd Edition. This is the the first example and already I'm stumped with it. Here's the code with the error at the end.

我是 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

What does this mean?

这是什么意思?

回答by NPE

The

HOST = ' '

should read

应该读

HOST = ''

(i.e. no space between the quotes).

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

The reason you're getting the error is that ' 'is not a valid hostname. In this context, ''has a special meaning (it basically means "all local addresses").

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

回答by glglgl

It means that your given host name ' 'is invalid (gai stands for getaddrinfo()).

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

As NPE already states, maybe an empty string ''would be more appropriate than a space ' '.

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