Я всегда думал, что если вы не выполнили биение сердца, не было никакого способа узнать, неожиданно ли скончалась одна сторона соединения TCP. Если процесс был просто убит с одной стороны и не вышел изящно, не было никакого способа, чтобы сокет послал FIN или позволил другой стороне узнать, что он был закрыт.Tcp Socket Closed
(См некоторые комментарии здесь, например http://www.perlmonks.org/?node_id=566568)
Но есть сервер запас для того, что я подключаю к тому, что появился новый «отменить все заказы на отключения функции», который отменяет реальные заказы, если клиент дис -connects. Он работает, даже когда я убиваю процесс на моем конце, и, безусловно, нет никакого биения от моего приложения к нему.
Итак, как он может обнаружить, когда я убил процесс? Мое приложение работает в Windows Server 2003, а сервер заказов - на Suse Linux Enterprise Server 10. Означает ли Windows, что процесс, связанный с сокетом, больше не жив и отправляет FIN?
Btw вы можете подробнее описать, как «пакеты FIN теряются»? – Pacerier
@Pacerier Ну, IP ненадежен, существует несколько способов падения или повреждения пакетов. Если пакет FIN (и последующие повторные передачи FIN или RST-пакеты), который должен взаимодействовать со сверстником, который должен быть закрыт, потерян, эксперт никогда не узнает об этом факте. Возможно, сверстник ожидает получить больше данных, которых никогда не будет. – nos
Да, я имею в виду, как насчет «количества способов падений пакетов или их повреждения»? – Pacerier