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()