Я не уверен, что вы подразумеваете под "первым сбросом", поскольку после разрыва соединения под сокетом сокет должен быть закрыт. Все зависит от того, что вы делаете вне функции CheckSocket()
. Но при условии, что все это обрабатывается правильно, простой опрос сокета не будет работать надежно, если базовое соединение не используется.
Отключение может быть обнаружено только в том случае, если на базовом транспорте имеется некоторый трафик. Если соединение не используется (не закрыто) во время простоя, оно будет спокойно сидеть там вечно. Чтобы обнаружить потерянное соединение во время простоя, используйте setsockopt()
с SO_KEEPALIVE
. TCP будет периодически обмениваться фиктивным трафиком с другой стороной, чтобы проверить, является ли соединение все еще живым, и предотвратить тайм-аут любых NAT или других правил динамической маршрутизации. Обратите внимание, что для обнаружения сброса все еще может потребоваться 30 секунд или более, так как это время ожидания TCP по умолчанию.