Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions aiograpi/realtime/fbns.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions tests/regression/test_fbns.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Loading