【问题标题】:Weird select error in pythonpython中的奇怪选择错误
【发布时间】:2012-09-27 23:11:21
【问题描述】:

好的,所以我有 Python 2.5 和 Windows XP。我将 select.select 与套接字对象一起使用。我一次又一次地尝试它,但是每当我运行它时,它所在的线程都会给我一个错误,例如 select.error(9, "Bad file descriptor")。 代码是这样的:

import socket, select
s = socket.socket()
s.bind((socket.gethostbyname(socket.gethostname()), 1312))
s.listen(5)
inputs = [s]
outputs = []
while True:
    r, w, e = select.select(inputs, outputs, inputs)
    for sock in r:
        if sock is s:
            inputs.append(s.accept()[0])
        else:
            print s
            print s.recv(1024)

任何信息将不胜感激。谢谢!

【问题讨论】:

    标签: python sockets python-sockets


    【解决方案1】:
    1. 你打电话给select.select,没有任何参数。它应该类似于:select.select(inputs, outputs, [])

    2. else 中,您需要使用sock,而不是s(服务器)。

    3. 一旦对等方与先前连接的套接字断开连接,您应该将其从inputs 列表中删除。如果sock.recv() 返回空字符串或引发socket.error 异常,您可以知道对等方已断开连接。如果你不这样做,你最终可能会向select.select 提供一个无效的套接字描述符,从而导致你所说的错误。

    【讨论】:

    • 对不起,我错过了在我的代码中输入的 select.select(inputs, outputs, inputs i>)。我会解决的
    • 酷。我的另外两个 cmets 仍然适用 :)
    • 哈哈。再次是我匆忙编码的结果。我在实际代码中修复了它。第三条评论,好吧,客户端没有断开连接。
    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多