Merge pull request #123 from mpetazzoni/fix-log-stream-recvall

Fix stream receive by correctly reading all required bytes from the socket
This commit is contained in:
Joffrey F 2013-12-17 05:53:41 -08:00
commit 98c5a85ac4
1 changed files with 11 additions and 2 deletions

View File

@ -253,15 +253,24 @@ class Client(requests.Session):
"""A generator of multiplexed data blocks coming from a response
socket."""
socket = self._stream_result_socket(response)
def recvall(socket, size):
data = ''
while size > 0:
block = socket.recv(size)
data += block
size -= len(block)
return data
while True:
socket.settimeout(None)
header = socket.recv(8)
header = recvall(socket, STREAM_HEADER_SIZE_BYTES)
if not header:
break
_, length = struct.unpack('>BxxxL', header)
if not length:
break
yield socket.recv(length).strip()
yield recvall(socket, length).rstrip()
def attach(self, container):
socket = self.attach_socket(container)