Я предполагаю, что вы говорите о TCP.
Если ваше интернет-соединение отсутствует на секунду, вы можете вообще не потерять TCP-соединение, оно просто ретранслирует и возобновляет работу.
Существует 100 других причин, по которым вы могли потерять соединение (например, межсетевой шлюз NAT решил выбрасывать соединение молча. На другом конце пострадала ядерная бомба. Ваш маршрутизатор сгорел. Парень на другом конце выдернул его сетевой кабель и тд и тп.)
Вот что вы должны сделать, если вам нужно обнаружить мертвые перы / закрытые сокеты и т. Д.:
Чтение из сокета или каким-либо другим образом ожидание событий входящих данных на нем. Это позволяет вам определить, когда соединение было изящно закрыто или произошла ошибка (чтение по нему возвращает 0 или -1) - по крайней мере, если другой конец все еще может отправить пакет TCP FIN / RST или ICMP на ваш хост .
Запись в розетку - например, отправлять сердцебиение каждые N секунд. Простое чтение из сокета не обнаружит проблему, когда другой конец завершится неудачно. Если этот компьютер отключается, он, очевидно, не может сказать вам, что он это сделал, поэтому вам придется отправить ему что-нибудь и посмотреть, отвечает ли он.
Если вы не хотите записывать сердцебиения каждые N секунд, вы можете, по крайней мере, включить поддержку активности TCP - и в конечном итоге вы получите уведомление, если узел мертв. Вы все еще должны читать из сокета, и сообщения активности обычно отправляются каждые 2 часа по умолчанию. Это все же лучше, чем хранить мертвые розетки месяцами.