James,
setsockopt() should have an option called SO_KEEPALIVE to enable
keepalives at the TCP level. Is this really what Mark is looking for,
though? I mean, I know they have the same name -- but are they the
same thing?
Seems to me that TCP keepalives are really intended for detection of
broken connetions, and aren't sent often enough to keep a telnet alive.
Telnet (RFC 854) also defines an "Are You There" (AYT) code that can be
sent periodically to verify that a telnet session is still active -- and
there's also an extension to telnet (RFC 860) for timing marks, which
has a similar purpose AFIAK.
I'd be nervous about trying to implement any of these without first
determining what exactly the other emulators send when they're trying to
keep the connection active....
James Rich wrote:
Interesting to note that I usually have the exact reverse problem:
Windows Client Access sessions drop but tn5250 marches on perfectly.
In linux there are three tcp keepalive settings: tcp_keepalive_intvl,
tcp_keepalive_probes, and tcp_keepalive_time in /proc/sys/net/ipv4 (at
least there are on kernel 2.6.24.5). Might these be something like what
you are looking for? I thought I remembered seeing an option to
setsockopt that would set the tcp keepalive per socket but a quick review
of the man page turns up nothing (other than referencing the /proc
settings I listed above).
James Rich
if you want to understand why that is, there are many good books on
the design of operating systems. please pass them along to redmond
when you're done reading them :)
- Paul Davis on ardour-dev