Unfortunately no.
There are many types of ways for a
client process to stop communicating with a server.
If the client dies "nicely" and closes its socket, you will
get a close on the socket (a TCP packet with the RST flag set).
Even if the client process dies hard (kill -9 or core-dump) a
RST packet will usually be sent.
However in the worse case (a dealock as you describe is
a good example of this, another would be
a network error that prevented any more packets
from transiting from client to server, or the OS kernel
on the machine running the client locking up) the
only way to detect this it to timeout. If you are
concerned about detecting this kind of problem
earlier you could have heartbeat packets
sent at regular intervals that you could
use to detect problems. However, this approach can use
up a lot of bandwidth and requires some relatively
intricate additional code in both the client and server.
| [reply] |