Python套接字出现错误代码9:坏文件描述符

45

我的代码是这样的:

while 1:
    # Determine whether the server is up or down
    try:
        s.connect((mcip, port))
        s.send(magic)
        data = s.recv(1024)
        s.close()
        print data
    except Exception, e:
        print e
    sleep(60)

第一次运行它能够正常工作,但之后每次都会报Errno 9错误。我做错了什么?

顺便提一下,

mcip = "mau5ville.com"
port = 25565
magic = "\xFE"
2个回答

72

你正在对已经关闭的套接字调用 connect。这样做是不行的。

close 的文档中说:

套接字对象上的所有未来操作都将失败。

只需将 s = socket.socket()(或其他您拥有的内容)移到循环中即可。(或者,如果您愿意,使用 create_connection 来代替两个步骤, 这样更难出错,还可以避免猜测 IPv4 vs. IPv6 等问题。)


5
我过去解决了这个问题,你必须在connect()之前创建socket:
    s = socket(AF_INET, SOCK_STREAM)

那么继续进行:
    s.connect((mcip, port))
    s.send(magic)
    data = s.recv(1024)
    s.close()
    print dat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接