@@ -173,21 +173,23 @@ def create_packet(cls, payload: Union[bytes, str, dict],
173173 return packet
174174
175175 @classmethod
176- def receive_packet (cls , conn : socket , size : int ) -> bytes :
176+ def receive_packet (cls , conn : socket , size : int , log : Logger ) -> bytes :
177177 """Receive a Zabbix protocol packet.
178178
179179 Args:
180180 conn (socket): Opened socket connection
181181 size (int): Expected packet size
182+ log (Logger): Logger object
182183
183184 Returns:
184185 bytes: Received packet content
185186 """
186187 buf = b''
187188
188- while True :
189+ while len ( buf ) < size :
189190 chunk = conn .recv (size - len (buf ))
190191 if not chunk :
192+ log .debug ("Socket connection was closed before receiving expected amount of data." )
191193 break
192194 buf += chunk
193195
@@ -209,7 +211,7 @@ def parse_packet(cls, conn: socket, log: Logger, exception) -> str:
209211 str: Body of the received packet
210212 """
211213
212- response_header = cls .receive_packet (conn , cls .HEADER_SIZE )
214+ response_header = cls .receive_packet (conn , cls .HEADER_SIZE , log )
213215 log .debug ('Zabbix response header: %s' , response_header )
214216
215217 if (not response_header .startswith (cls .ZABBIX_PROTOCOL ) or
@@ -233,8 +235,8 @@ def parse_packet(cls, conn: socket, log: Logger, exception) -> str:
233235 )
234236 # 0x02 - Using packet compression mode
235237 if flags & 0x02 :
236- response_body = zlib .decompress (cls .receive_packet (conn , datalen ))
238+ response_body = zlib .decompress (cls .receive_packet (conn , datalen , log ))
237239 else :
238- response_body = cls .receive_packet (conn , datalen )
240+ response_body = cls .receive_packet (conn , datalen , log )
239241
240242 return response_body .decode ("utf-8" )
0 commit comments