3

好的,所以我有 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)

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

4

1 回答 1

4
  1. 你打电话select.select没有任何论据。它应该是这样的:select.select(inputs, outputs, []).

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

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

于 2012-10-07T13:35:03.097 回答