1
저는 간단한 비동기 HTTP 프록시를 만들고 있습니다. 나는 (내가 수신 된 데이터의 특정 크기를 알 수 없기 때문에) 모든 데이터를 수신하기 위해이 기능을 썼다recv()가 동일한 데이터를 계속 반환합니다.
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 moved permanently ..."). 이것은 recv()의 아주 이상한 행동입니다. 아마 이것은 소켓에서 모든 데이터를받는 가장 좋은 방법은 아니지만이 동작에 대한 설명은 생각할 수 없습니다.