def recv()

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