好的,我有 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)
如有任何信息,我们将不胜感激。谢谢!
最佳答案
您调用了没有参数的
select.select
。它应该类似于:select.select(inputs, outputs, [])
。在
else
中,您需要使用sock
,而不是s
(服务器)。一旦对等点与先前连接的套接字断开连接,您应该将其从
inputs
列表中删除。如果sock.recv()
返回空字符串或引发socket.error
异常,您可以知道对等方已断开连接。如果不这样做,您最终可能会向select.select
提供无效的套接字描述符,从而导致您提到的错误。
关于python - python中奇怪的选择错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12769230/