Python 为什么无法选择。选择()捕获关闭的套接字错误?
附加到elist中的封闭客户端套接字,但调用select时ex中没有异常。我不知道为什么,你能帮我吗。非常感谢Python 为什么无法选择。选择()捕获关闭的套接字错误?,python,sockets,Python,Sockets,附加到elist中的封闭客户端套接字,但调用select时ex中没有异常。我不知道为什么,你能帮我吗。非常感谢 r,w,ex = select.select(rlist, wlist,elist ) for s in ex: print "catch a closed socket error!" 要捕获套接字关闭事件,需要将套接字置于rlist中。当另一侧的连接关闭时,select返回并表示关闭的套接字已准备好进行读取(即,它在您的r列表中)。如果在此套接字上执行rec
r,w,ex = select.select(rlist, wlist,elist )
for s in ex:
print "catch a closed socket error!"
要捕获套接字关闭事件,需要将套接字置于
rlist
中。当另一侧的连接关闭时,select
返回并表示关闭的套接字已准备好进行读取(即,它在您的r
列表中)。如果在此套接字上执行recv
,它返回一个空列表(未读取任何内容),则表示连接已关闭
data = s.recv(size)
if not data:
# socket has been closed by peer
s.close()
从我所看到的,异常列表(select的最后一个参数)并没有被广泛使用。它的主要问题是不同的操作系统对该参数的解释不同。有时,它甚至只用于看起来根本不是异常的情况(OOB数据)
socket
模块文档没有具体说明该参数的含义,因此依赖它通常不是一个好主意:
xlist:等待“异常情况”(有关详细信息,请参阅手册页
您的系统如何考虑这种情况)
谢谢你的帮助,但我有一个问题,闭合套接字错误是否是一种例外情况?你也可以参考。一个很好的答案。非常感谢:)顺便说一句,最后一个列表根本不起作用。这是正确的做法。