Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 3.x 为什么python选择器模块没有套接字错误事件_Python 3.x_Sockets - Fatal编程技术网

Python 3.x 为什么python选择器模块没有套接字错误事件

Python 3.x 为什么python选择器模块没有套接字错误事件,python-3.x,sockets,Python 3.x,Sockets,在select中,有一个错误套接字列表或epoll有error事件 但是在选择器模块中,只有事件读取和事件写入的事件 因此,如何在没有事件的情况下知道错误套接字?套接字上的错误将始终导致底层套接字被标记为可读(至少)。例如,如果您正在等待来自远程对等方的数据,而该对等方关闭了其连接端(或abends,它执行相同的操作),则本地套接字将获得事件\u READ标记。当你去读它时,你会得到零字节(文件的结尾),告诉你对等方已经不在了(或者至少已经完成了发送) 类似地,如果您正在等待发送数据,并且对等方

select
中,有一个错误套接字列表或
epoll
error
事件

但是在
选择器
模块中,只有
事件读取
事件写入
的事件


因此,如何在没有事件的情况下知道错误套接字?

套接字上的错误将始终导致底层套接字被标记为可读(至少)。例如,如果您正在等待来自远程对等方的数据,而该对等方关闭了其连接端(或abends,它执行相同的操作),则本地套接字将获得
事件\u READ
标记。当你去读它时,你会得到零字节(文件的结尾),告诉你对等方已经不在了(或者至少已经完成了发送)

类似地,如果您正在等待发送数据,并且对等方重置了连接,您将收到
事件\u WRITE
通知。然后,当您尝试发送时,将从发送中得到一个错误(在python中,这表示异常)

在这里,从
select
中丢失的唯一一件事是检测异常情况的能力:从
select.select中选择
xlist
或从
select.poll
中选择
POLLPRI
。如果需要,则需要直接使用较低级别的
选择
模块。(优先级/带外数据不常用,因此这不是一个不合理的选择。)

因此,
选择器提供的简化界面实际上不会丢失任何“错误”信息。如果套接字上存在错误,可能会导致从
select.poll
返回
POLLERR
,远程RST,例如,您将收到
事件读取
事件写入
通知,一旦尝试
发送
接收
,发生的任何错误都将重新触发

要记住
select
poll
和friends的一条经验法则是,指示“可读”的结果实际上意味着“如果您尝试阅读,则不会被阻止”。这并不意味着您将实际从读取中获取数据;您可能会得到一个错误


同样,对于“可写”:您可能无法发送数据,但尝试写入不会阻塞。

您是在谈论模块吗?@user2357112是的,我是