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
|
"""A generator of multiplexed data blocks coming from a response
|
||||||
socket."""
|
socket."""
|
||||||
socket = self._stream_result_socket(response)
|
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:
|
while True:
|
||||||
socket.settimeout(None)
|
socket.settimeout(None)
|
||||||
header = socket.recv(8)
|
header = recvall(socket, STREAM_HEADER_SIZE_BYTES)
|
||||||
if not header:
|
if not header:
|
||||||
break
|
break
|
||||||
_, length = struct.unpack('>BxxxL', header)
|
_, length = struct.unpack('>BxxxL', header)
|
||||||
if not length:
|
if not length:
|
||||||
break
|
break
|
||||||
yield socket.recv(length).strip()
|
yield recvall(socket, length).rstrip()
|
||||||
|
|
||||||
def attach(self, container):
|
def attach(self, container):
|
||||||
socket = self.attach_socket(container)
|
socket = self.attach_socket(container)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue