据我所知,当你调用socket.settimeout(value)并设置一个大于0.0的float值时,如果对socket.recv的调用等待的时间超过了,那么该套接字将引发一个scocket.timeout.指定的值.
但想象一下,我必须接收大量数据,并且我必须多次调用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)如果我在读完所有数据后没有将超时设置为无,那么有什么不好的事情发生吗? (连接保持活跃状态,将来可以请求更多数据).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)