I always thought that if you did not perform a heartbeat, there was no way to find out if one side of the TCP connection unexpectedly died. If the process was simply killed on one side and did not exit gracefully, there was no way for the socket to send FIN or to let the other know that it was closed.
(see some comments here, for example http://www.perlmonks.org/?node_id=566568 )
But there is a purchase order server to which I connect, it has a new “cancel all orders for the disconnect function”, which cancels direct orders if the client disconnects. It works even when I kill a process at my end, and certainly there is no beating from my application to it.
So how can he detect when I killed the process? My application runs on Windows Server 2003, and the order server runs on Suse Linux Enterprise Server 10. Does Windows mean that the socket process is no longer alive and sends FIN?
source share