[erlang-questions] ssl_closed not always received

Khitai Pang khitai.pang@REDACTED
Mon Apr 11 11:43:33 CEST 2016


On 2016/4/11 17:24, Loïc Hoguin wrote:
> On 04/11/2016 10:23 AM, Roger Lipscombe wrote:
>> On 10 April 2016 at 22:34, Khitai Pang <khitai.pang@REDACTED> wrote:
>>> How to make sure that the server process always get ssl_closed when the
>>> client process on a remote host quits?
>>
>> In the general case, you *can't*. This is due to the vagaries of TCP.
>> To close a socket, the client will send a FIN packet to the server. If
>> the network connection is lost (consider simply unplugging the cable),
>> then the FIN will *never* arrive. If you need to know when the client
>> has gone away, either implement some kind of application-level
>> keepalive or enable TCP keepalive.
>
> You need a bi-directional ping mechanism at the application level. TCP 
> keepalive is not always enough.

How about this?  The client sends a heartbeat message to the server 
every 2 minutes and the server replies with a heartbeat ack.  The server 
deems the connection as lost if no heartbeat received in 2 minutes and 
the client deems the connection as lost if heartbeat ask is not received 
in 2 minutes.  This sounds like uni-directional to me but would it suffice?


Thanks
Khitai



More information about the erlang-questions mailing list