一个封闭的客户端套接字附加到elist中,但在选择调用时ex中没有异常.我不知道为什么,你能帮帮我吗?非常感谢!
r,w,ex = select.select(rlist, wlist,elist )
for s in ex:
print "catch a closed socket error!"
Run Code Online (Sandbox Code Playgroud)
要捕获正在关闭的套接字事件,您需要使用套接字rlist.当连接在另一侧关闭时,select返回并表示已关闭的套接字已准备好进行读取(即它在您的r列表中).如果您recv在此套接字上执行它并返回一个空列表(没有读取任何内容),则表示已关闭连接.
data = s.recv(size)
if not data:
# socket has been closed by peer
s.close()
Run Code Online (Sandbox Code Playgroud)
从我所看到的,异常列表(select的最后一个参数)没有被广泛使用.它的主要问题是不同的操作系统以不同的方式解释此参数.有时它甚至只用于似乎根本不是例外的情况(OOB数据).
socket 模块文档并不具体说明该参数的含义,因此依赖它通常不是一个好主意:
xlist:等待"异常情况"(请参阅手册页,了解系统认为的这种情况)
| 归档时间: |
|
| 查看次数: |
3775 次 |
| 最近记录: |