in pyignite/connection/connection.py [0:0]
def recv(self, flags=None, reconnect=True) -> bytearray:
"""
Receive data from the socket.
:param flags: (optional) OS-specific flags.
:param reconnect: (optional) reconnect on failure, default True.
"""
if self.closed:
raise SocketError('Attempt to use closed connection.')
kwargs = {}
if flags is not None:
kwargs['flags'] = flags
data = bytearray(DEFAULT_INITIAL_BUF_SIZE)
buffer = memoryview(data)
total_rcvd, packet_len = 0, 0
while True:
try:
bytes_rcvd = self._socket.recv_into(buffer, len(buffer), **kwargs)
if bytes_rcvd == 0:
raise SocketError('Connection broken.')
total_rcvd += bytes_rcvd
except connection_errors as e:
self.failed = True
if reconnect:
self._on_connection_lost(e)
self.reconnect()
raise e
if packet_len == 0 and total_rcvd > 4:
packet_len = int.from_bytes(data[0:4], PROTOCOL_BYTE_ORDER, signed=True) + 4
if packet_len > len(data):
buffer.release()
data.extend(bytearray(packet_len - len(data)))
buffer = memoryview(data)[total_rcvd:]
continue
if 0 < packet_len <= total_rcvd:
buffer.release()
break
buffer = buffer[bytes_rcvd:]
return data