The ServerASK protocol detects that a client bound to it is no longer connected as follows:
The AppServer infers that the client connection has failed. It does this passively, by keeping track of the time of the last activity on the connection.
If no messages have been sent to, or are received from, the client within a specific time interval (as specified by the serverASKActivityTimeout property), the AppServer will take active steps to determine if the client is still connected.
The AppServer sends an askPing request to the client.
When the client receives the askPing request, it must send an askPing response message to the AppServer, regardless of the current state of the connection.
When the AppServer receives the askPing response, it updates the timestamp of the connection.
If the AppServer does not receive a message from the client within a specific time interval (as specified by the serverASKResponseTimeout property), the AppServer will deem the connection to be in failure, and take action as if a fatal communication error had occurred. This will likely result in disconnecting the socket.
Note that the AppServer will not take action unless both the activity and response timers expire.