@@ -156,6 +156,9 @@ def _connection_listener(self):
156156 return self .client ._event_listeners
157157
158158
159+ DEFAULT_INITIAL_BUF_SIZE = 1024
160+
161+
159162class Connection (BaseConnection ):
160163 """
161164 This is a `pyignite` class, that represents a connection to Ignite
@@ -348,39 +351,35 @@ def recv(self, flags=None, reconnect=True) -> bytearray:
348351 if flags is not None :
349352 kwargs ['flags' ] = flags
350353
351- data = bytearray (1024 )
354+ data = bytearray (DEFAULT_INITIAL_BUF_SIZE )
352355 buffer = memoryview (data )
353- bytes_total_received , bytes_to_receive = 0 , 0
356+ total_rcvd , packet_len = 0 , 0
354357 while True :
355358 try :
356- bytes_received = self ._socket .recv_into (buffer , len (buffer ), ** kwargs )
357- if bytes_received == 0 :
359+ bytes_rcvd = self ._socket .recv_into (buffer , len (buffer ), ** kwargs )
360+ if bytes_rcvd == 0 :
358361 raise SocketError ('Connection broken.' )
359- bytes_total_received += bytes_received
362+ total_rcvd += bytes_rcvd
360363 except connection_errors as e :
361364 self .failed = True
362365 if reconnect :
363366 self ._on_connection_lost (e )
364367 self .reconnect ()
365368 raise e
366369
367- if bytes_total_received < 4 :
368- continue
369- elif bytes_to_receive == 0 :
370- response_len = int .from_bytes (data [0 :4 ], PROTOCOL_BYTE_ORDER )
371- bytes_to_receive = response_len
372-
373- if response_len + 4 > len (data ):
370+ if packet_len == 0 and total_rcvd > 4 :
371+ packet_len = int .from_bytes (data [0 :4 ], PROTOCOL_BYTE_ORDER , signed = True ) + 4
372+ if packet_len > len (data ):
374373 buffer .release ()
375- data .extend (bytearray (response_len + 4 - len (data )))
376- buffer = memoryview (data )[bytes_total_received :]
374+ data .extend (bytearray (packet_len - len (data )))
375+ buffer = memoryview (data )[total_rcvd :]
377376 continue
378377
379- if bytes_total_received >= bytes_to_receive :
378+ if 0 < packet_len <= total_rcvd :
380379 buffer .release ()
381380 break
382381
383- buffer = buffer [bytes_received :]
382+ buffer = buffer [bytes_rcvd :]
384383
385384 return data
386385
0 commit comments