From 1fe3c041c4fce08c1f88cdced2d14160af3999a1 Mon Sep 17 00:00:00 2001 From: Maxime Petazzoni Date: Mon, 16 Dec 2013 15:54:19 -0800 Subject: [PATCH] Fix stream receive by correctly reading all required bytes from the socket Signed-off-by: Maxime Petazzoni --- docker/client.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docker/client.py b/docker/client.py index fd4c9e19..3531efaa 100644 --- a/docker/client.py +++ b/docker/client.py @@ -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)