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