From e26340b948290fb1c1049ad322a43ed93aebcb9f Mon Sep 17 00:00:00 2001 From: subzeroid <143403577+subzeroid@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:17:53 +0300 Subject: [PATCH] fix: keep FBNS connected on read timeout --- aiograpi/realtime/fbns.py | 2 ++ tests/regression/test_fbns.py | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/aiograpi/realtime/fbns.py b/aiograpi/realtime/fbns.py index 9fdac3e4..26b81774 100644 --- a/aiograpi/realtime/fbns.py +++ b/aiograpi/realtime/fbns.py @@ -314,6 +314,8 @@ async def _send(self, packet: bytes) -> None: async def _recv_packet(self) -> bytes: try: return await asyncio.to_thread(self.transport.recv_packet) + except TimeoutError: + raise except Exception: self.connected = False raise diff --git a/tests/regression/test_fbns.py b/tests/regression/test_fbns.py index eda5be34..739c4243 100644 --- a/tests/regression/test_fbns.py +++ b/tests/regression/test_fbns.py @@ -249,6 +249,18 @@ async def test_fbns_read_once_marks_client_disconnected_when_socket_closes(self) self.assertFalse(fbns.connected) + async def test_fbns_read_once_keeps_client_connected_on_socket_timeout(self): + client = _build_logged_in_client() + transport = mock.Mock() + transport.recv_packet.side_effect = TimeoutError("timed out") + fbns = FbnsClient(client, transport=transport) + fbns.connected = True + + with self.assertRaises(TimeoutError): + await fbns.read_once() + + self.assertTrue(fbns.connected) + async def test_fbns_disconnect_clears_client_state_after_broken_socket(self): client = _build_logged_in_client() transport = mock.Mock()