Hello,
I am working on an application that needs to be able to rapidly detect a
lost connection between an ssh client and ssh server. I am using ssh to
do local and remote port forwarding, and sending data across the
forwarded ports. I was originally relying upon the TCPKeepAlive probes,
but found that I could not consistently detect a lost detection. Using
the ServerAliveInterval and ServerAliveCountMax options, however, I am
able to consistently detect a lost connection. The problem is, if I am
using a low-bandwidth connection (cellular modem), and I am pushing a
significant amount of data across, it seems that this hinders the
communication between the client and server with the ServerAlive
messages. In other words, when I am actually USING the connection, my
application can mistakenly detect the connection as lost because the
ServerAliveInterval x ServerAliveCountMax is exceeded without a response
from the server. I was surprised at this behavior, since I expected the
ServerAlive probes to only start after data flow between the client and
server machines across that connection had ceased, but perhaps I am
misunderstanding. I do not have much leeway as to how the server is
configured. Can someone recommend a way to be able to both (1) quickly
detect a lost connection [which, seems to require the interval and
countmax be small], but not mistakenly detect the connection as lost
when it is being used?
Thank you for any assistance.
Don
I am working on an application that needs to be able to rapidly detect a
lost connection between an ssh client and ssh server. I am using ssh to
do local and remote port forwarding, and sending data across the
forwarded ports. I was originally relying upon the TCPKeepAlive probes,
but found that I could not consistently detect a lost detection. Using
the ServerAliveInterval and ServerAliveCountMax options, however, I am
able to consistently detect a lost connection. The problem is, if I am
using a low-bandwidth connection (cellular modem), and I am pushing a
significant amount of data across, it seems that this hinders the
communication between the client and server with the ServerAlive
messages. In other words, when I am actually USING the connection, my
application can mistakenly detect the connection as lost because the
ServerAliveInterval x ServerAliveCountMax is exceeded without a response
from the server. I was surprised at this behavior, since I expected the
ServerAlive probes to only start after data flow between the client and
server machines across that connection had ceased, but perhaps I am
misunderstanding. I do not have much leeway as to how the server is
configured. Can someone recommend a way to be able to both (1) quickly
detect a lost connection [which, seems to require the interval and
countmax be small], but not mistakenly detect the connection as lost
when it is being used?
Thank you for any assistance.
Don