Enabling system wide TCP keepalives on a Windows system
Your assessment of the TCP keepalive functionality in Windows being like Linux is correct.
You can manipulate the registry parameters related to TCP keepalives all you want, but unless the application uses setsockopt()
to request keepalives none will be sent by default.
If you want to actually see keepalives in action on Windows and don't want to write code, tick the "Enable TCP keepalives (SO_KEEPALIVE)" in the "Connection" properties in the PuTTY SSH/TELNET/etc client, initiate a connection, allow it to sit idle, and sniff the traffic. (It's the first app I could think of that I knew could be consciouly configured to use SO_KEEPALIVE...)
Related videos on Youtube
nik
Updated on September 17, 2022Comments
-
nik almost 2 years
Can I change/add the
KeepAliveTime
and related registry variables to make a Windows machine send TCP keepalive packets on an idle connection?I want to know if anyone has successfully got this working. Specifically, when the application idling on the TCP connection is doing nothing particular (setsockopt) to keepalive the connection.
This Microsoft TechNet details on Configuring system wide Keep-Alives with the KeepAliveTime and related registry variables.
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
It seems like the Linux system wide configuration for using keep-alive.
But, that requires programs to use thesetsockopt()
and request keep-alive (right?).Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive...
-
nik about 14 yearsI have seen keepalives in action and yes, PuTTY is actually quite good about them. But, my interest is in making a non-standard application (that I cannot recompile due to lack of source) use them during its extended communication hiatus -- the app can go silent for days (not just hours). The best way I can think of is a global keepalive on either the client or the server machine.