diff --git a/pymodbus/transport/transport.py b/pymodbus/transport/transport.py index c38fc3693..c92352ed1 100644 --- a/pymodbus/transport/transport.py +++ b/pymodbus/transport/transport.py @@ -305,9 +305,10 @@ def datagram_received(self, data: bytes, addr: tuple | None) -> None: if not data: return Log.transport_dump(Log.RECV_DATA, data, self.recv_buffer) + self.recv_buffer += data if len(self.recv_buffer) > 1024: self.recv_buffer = b"" - self.recv_buffer += data + return cut = self.callback_data(self.recv_buffer, addr=addr) self.recv_buffer = self.recv_buffer[cut:] if self.recv_buffer: diff --git a/test/transport/test_comm.py b/test/transport/test_comm.py index 11201448c..5515e37a5 100644 --- a/test/transport/test_comm.py +++ b/test/transport/test_comm.py @@ -182,7 +182,7 @@ async def test_serial_poll(self, client, server, use_port): await asyncio.sleep(0.5) assert len(server.active_connections) == 1 server_connected = list(server.active_connections.values())[0] - test_data = b"abcd" * 1000 + test_data = b"abcd" * 10 client.send(test_data) await asyncio.sleep(0.5) assert server_connected.recv_buffer == test_data diff --git a/test/transport/test_protocol.py b/test/transport/test_protocol.py index 26e7b5d7b..7ff2f8456 100644 --- a/test/transport/test_protocol.py +++ b/test/transport/test_protocol.py @@ -142,7 +142,7 @@ async def test_datagram_buffer_overrun(self, client): client.callback_data = mock.MagicMock(return_value=0) client.recv_buffer = bytearray([0x01] * 2000) client.datagram_received(b"abc", "127.0.0.1") - assert client.recv_buffer == b"abc" + assert client.recv_buffer == b"" async def test_callback_connected(self, use_clc, dummy_protocol): """Test callbacks."""