Я пытаюсь понять, каково типичное поведение для следующего сценария. Обратите внимание, что я готов узнать больше об этом пограничном случае для любой ОС (*nix, Windows, ...).
Если приложение заблокировано в ожидании или затянувшийся сокет закрывается, что происходит при перезагрузке машины?
Рассмотрим следующий пример сценария:
Приложение имеет установленный TCP-сокет и затем вызывает close() для этого сокета. Сокет настроен на задержку (SO_LINGER), скажем, на 10 секунд.
Из-за настройки задержки приложение блокируется, ожидая (до) 10-секундного времени задержки до TX/RX/ACK оставшихся данных в соединении.
В это время происходит перезагрузка ядра (например, пользователь перезагружает машину).
Что делает ядро в таком случае?
Принуждает ли это закрытие сокета («неудачное закрытие»)? Вызывает потерю неотправленных/неподтвержденных данных?
Или он учитывает время задержки и ждет (возможно) полных 10 секунд? (Таким образом, блокируя перезагрузку, возможно, до тех пор, пока не истечет полное 10-секундное время задержки).
Что-то другое?
Спасибо,
Стив