On Thu, Jun 29, 2017 at 5:50 PM, Eric Prud'hommeaux <eric@w3.org> wrote:
> Tearing down a connection involves specific signalling on the TCP layer
> (FIN,RST).
> Now imagine your situation:
> You have two machines, and both have a TCP connection to each other.
> When the TCP connection is idle (i.e. nothing is sent between the two) there
> won't be any signalling on the TCP layer
> if TCP keep-alive is disabled and there is no application layer heartbeat
> mechanism.

Implied but not stated here: a TCP keep-alive would be sufficient to
notify a server about a client falling off the net, though you may
have other reasons to want your own heartbeat messages.

I have a connection map in my server as part of monitoring system to trace down the client connections. If the server can be notified by kernel for a client falling off, that will be
good to use a callback errorHandler to clean up the socket connection as well as the connection map automatically.

Bandwidth usage is another restriction in my application as the small devices connect by 3G / LTE, anyone knows what is the extra package size for using boost keep alive option?

If I have to use heartbeat in user level, I also need deploy a timer / polling mechanism in the server to check missing heartbeat messages then clear the connection and connection map. I don't mind if a client is in idle, but the monitoring system need to detect if a client is connected or not. I don't feel understanding boost socket keepalive option well, I need to explore the boost socket keepalive option more.