【发布时间】:2019-09-01 16:29:56
【问题描述】:
sock.recvfrom 可以向读者提出BlockingIOError 吗?比如下面
sock.setblocking(False)
def reader()
try:
(data, addr) = sock.recvfrom(512)
except BlockingIOError:
# Can this ever be raised?
loop.add_reader(sock.fileno(), reader)
同样,sock.send 可以从作家那里提出BlockingIOError 吗?
sock.setblocking(False)
def writer()
try:
bytes_sent = sock.send(data)
except BlockingIOError:
# Can this ever be raised?
loop.add_writer(sock.fileno(), writer)
我已经尝试发送/接收相当多的数据,但迄今为止从未发生过。从逻辑上讲,它永远不会真正发生吗?如果可能发生,在什么情况下?
【问题讨论】:
-
当然,只要 EAGAIN 被引发,即您从没有缓冲数据的套接字读取,或写入没有缓冲空间的套接字。
-
@user207421 但是读取器(或写入器)不是只有在有缓冲数据(或有空间)时才会触发吗?在什么情况下可以触发读者(或作者)而不是这种情况?我是否也可以强制发生这种情况,以进行调查/测试?
标签: python linux python-3.x sockets python-asyncio