From 9e1e7c33776c2c2f46fcaa6c396ced22b1f19214 Mon Sep 17 00:00:00 2001 From: clerie Date: Thu, 6 Jan 2022 23:55:36 +0100 Subject: [PATCH] Fix data read loop from connection --- mitel_ommclient2/connection.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/mitel_ommclient2/connection.py b/mitel_ommclient2/connection.py index fea526f..13bb5ae 100644 --- a/mitel_ommclient2/connection.py +++ b/mitel_ommclient2/connection.py @@ -22,7 +22,9 @@ class Connection: self._host = host self._port = port self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self._recv_buffer = "" + self._recv_buffer = b"" + + self._socket.settimeout(3) def connect(self): """ @@ -49,21 +51,26 @@ class Connection: data = b"" while True: - new_data = self._socket.recv(65536) - if new_data is not None: - data += new_data - else: + try: + new_data = self._socket.recv(1024) + except TimeoutError: break - self._recv_buffer += data.decode("utf-8") - if "\0" not in self._recv_buffer: + data += new_data + + if b"\0" in new_data: + break + + self._recv_buffer += data + + if b"\0" not in self._recv_buffer: # no new messages return None - message, buffer = self._recv_buffer.split("\0", 1) + message, buffer = self._recv_buffer.split(b"\0", 1) self._recv_buffer = buffer - return message + return message.decode("utf-8") def close(self): """