Могу ли я изменить/добавить KeepAliveTime
переменные реестра и связанные с ними, чтобы заставить машину Windows отправлять пакеты TCP keepalive при неактивном соединении?
Я хочу знать, удалось ли кому-нибудь успешно заставить это работать. В частности, когда приложение, простаивающее на TCP-соединении, не делает ничего особенного (setsockopt) для поддержания соединения.
В этом материале Microsoft TechNet подробно описываетсяНастройка общесистемных Keep-AlivesсKeepAliveTimeи связанные с ними переменные реестра.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
Кажется, чтоКонфигурация всей системы Linux для использования keep-alive.
Но для этого программы должны использовать setsockopt()
и запрашивать поддержку активности (верно?).
Помните, что поддержка keepalive, даже если она настроена в ядре, не является поведением по умолчанию в Linux. Программы должны запрашивать управление keepalive для своих сокетов с помощью интерфейса setsockopt. Существует относительно немного программ, реализующих keepalive...
решение1
Ваша оценка функциональности TCP keepalive в Windows, схожей с Linux, верна.
Вы можете манипулировать параметрами реестра, связанными с сообщениями TCP Keepalive, как вам угодно, но если приложение не setsockopt()
запрашивает сообщения Keepalive, по умолчанию они отправляться не будут.
Если вы хотите увидеть, как работают сообщения Keepalive в Windows, и не хотите писать код, отметьте галочкой опцию «Включить TCP Keepalives (SO_KEEPALIVE)» в свойствах «Подключение» вШпатлевкаКлиент SSH/TELNET/и т. д., инициирует соединение, позволяет ему бездействовать и прослушивает трафик. (Это первое приложение, которое, как я могу вспомнить, можно было сознательно настроить на использование SO_KEEPALIVE...)