mirror of https://github.com/docker/docker-py.git
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:
commit
98c5a85ac4
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue