Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么无法选择。选择()捕获关闭的套接字错误?_Python_Sockets - Fatal编程技术网

Python 为什么无法选择。选择()捕获关闭的套接字错误?

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

附加到elist中的封闭客户端套接字,但调用select时ex中没有异常。我不知道为什么,你能帮我吗。非常感谢

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:等待“异常情况”(有关详细信息,请参阅手册页 您的系统如何考虑这种情况)


谢谢你的帮助,但我有一个问题,闭合套接字错误是否是一种例外情况?你也可以参考。一个很好的答案。非常感谢:)顺便说一句,最后一个列表根本不起作用。这是正确的做法。