Я всегда думал, что если вы не реализуете пульс, не было никакого способа узнать, неожиданно ли одна сторона TCP-соединения оборвалась. Если процесс был просто убит с одной стороны и не завершился корректно, у сокета не было возможности отправить FIN или сообщить другой стороне, что он был закрыт.
(см. Некоторые комментарии, например, http://www.perlmonks.org/?node_id=566568)
Но есть сервер заказов на акции, к которому я подключаюсь, в котором есть новая функция «отменить все заказы при отключении», которая отменяет текущие заказы, если клиент отключается. Это работает, даже когда я прекращаю процесс с моей стороны, и, безусловно, нет пульса от моего приложения к нему.
Так как же он может определить, когда я убил процесс? Мое приложение работает на Windows Server 2003, а сервер заказов - на Suse Linux Enterprise Server 10. Обнаруживает ли Windows, что процесс, связанный с сокетом, больше не работает, и отправляет FIN?