【发布时间】:2016-03-26 01:49:57
【问题描述】:
据我所知,当您调用 socket.settimeout(value) 并设置大于 0.0 的浮点值时,当调用 socket.recv 必须等待比指定的值。
但是假设我必须接收大量数据,并且必须多次调用recv(),那么 settimeout 对此有何影响?
给定以下代码:
to_receive = # an integer representing the bytes we want to receive
socket = # a connected socket
socket.settimeout(20)
received = 0
received_data = b""
while received < to_receive:
tmp = socket.recv(4096)
if len(tmp) == 0:
raise Exception()
received += len(tmp)
received_data += tmp
socket.settimeout(None)
代码的第三行将套接字的超时设置为 20 秒。每次迭代都会重置超时吗?只有当其中一次迭代花费超过 20 秒时才会引发超时?
A) 如果接收所有预期数据的时间超过 20 秒,我如何对其进行重新编码以引发异常?
B) 如果我在读取所有数据后没有将超时设置为无,会发生什么不好的事情吗? (连接保持活动状态,将来可能会请求更多数据)。
【问题讨论】: