bin*_*bin 2 sockets python-3.x
在select,有一个错误套接字列表或epoll有事件ERROR
但是在selectors模块中只有EVENT_READ和的事件EVENT_WRITE。
因此?如何知道没有事件的错误套接字?
套接字上的错误将始终导致底层套接字被标记为可读(至少)。例如,如果您正在等待来自远程对等方的数据,并且该对等方关闭其连接端(或异常终止,执行相同的操作),则本地套接字将获得EVENT_READ标记。当你去阅读它时,你会得到零字节(文件结尾),告诉你对等点已经消失(或者至少完成了发送)。
同样,如果您正在等待发送数据并且对等方重置连接,您将收到EVENT_WRITE通知。然后当你尝试发送时,你会从发送中得到一个错误(在 python 中,这意味着一个异常)。
你在这里唯一失去的select是检测异常条件的能力:xlistfromselect.select或POLLPRIfrom select.poll。如果您需要这些,则需要直接使用较低级别的select模块。(优先/带外数据并不常用,所以这不是一个不合理的选择。)
所以所提供的简化界面,selectors真的不会丢失任何“错误”信息。如果套接字上的错误会导致从POLLERR返回select.poll,例如来自远程的 RST,例如,您将收到EVENT_READ或EVENT_WRITE通知,并且只要您尝试send或,就会重新触发发生的任何错误recv。
一个好的经验法则,以保持与头脑select,poll和朋友们的是,表示“可读”的结果真的意味着“如果你试图读取不会阻止”。这并不意味着您实际上会从读取中取回数据;您可能会收到错误消息。
同样对于“可写”:您可能无法发送数据,但尝试写入不会阻止。
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |