[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