【发布时间】:2014-08-28 17:05:28
【问题描述】:
我正在开发一个简单的异步 HTTP 代理。 我写了这个函数来接收所有数据(因为我不知道接收数据的具体大小):
def recvall(sock):
data = b""
while True:
r, w, e = select.select([sock], [], [], 1)
if r:
data+= sock.recv(65535)
if not data: # if empty
break
else:
break
return data
这段代码运行良好,但在我的测试过程中,我注意到循环永远不会结束并且一次又一次地接收相同的数据(特别是“301 永久移动......”)。 这是 recv() 的非常奇怪的行为。 可能这不是从套接字接收所有数据的最佳方式,但我想不出对此行为的任何解释。
【问题讨论】:
标签: python sockets select python-3.x recv