Вы должны заменить asyncio.wait([...], timeout=7)
на asyncio.wait_for
:
try:
data = await asyncio.wait_for(
loop.sock_recv(client_sock, max_rec), 7)
except ConnectionResetError:
... handle connection reset
except asyncio.TimeoutError:
... handle timeout
Разница между asyncio.wait_for(x, 7)
и asyncio.wait([x], timeout=7)
состоит в том, что wait_for
отменит ожидаемый, если истекло время ожидания. С другой стороны, asyncio.wait()
оставит его работать в фоновом режиме (и вернет его в наборе pending
).
В вашем случае, скорее всего, произойдет то, что sock_recv
поднимет ConnectionResetError
после более 7сек. Как написано, ваш код обрабатывает ошибку, только если она возникает в течение первых 7 секунд. Если это произойдет позже, оно будет вызвано в фоновой задаче и сообщено обработчиком исключений по умолчанию.
Кстати, вам, вероятно, не следует использовать sock_recv
напрямую; это низкоуровневый API, о котором должны заботиться только разработчики новых циклов событий. В коде приложения следует использовать asyncio.open_connection
.