Я использую патч-сокет gevent для подключения к потоковому серверу, и я использую соединение ADSL.
Я не контролирую сервер, но в своих тестах, если я остановлю сервер, я могу обнаружить отключение, просто проверив, является ли результат recv пустой строкой, но если я выключу свой ADSL-модем, recv никогда не завершится. Если я просто отключу сетевой кабель своего компьютера, он также не вернет пустую строку, но когда я снова подключу его, он вернет все, что сервер отправил тем временем, поэтому я предполагаю, что маршрутизатор или модем поддерживают соединение для меня. и буферизация потока, пока мой сетевой кабель отключен.
Я попытался установить socket.SO_RCVTIMEO на несколько секунд, но он не обнаружил разъединение, recv продолжает «блокироваться» навсегда. Это gevent, поэтому он блокирует только greenthread, но мне нужно как можно скорее обнаружить это отключение, чтобы я мог попытаться восстановить подключение.