This isn't directly related to ZeroMQ, but it is somewhat relevant now given A) the addition of the (yet unimplemented) heartbeating feature in ZMTP/3.0 and B) the Windows TCP keepalive parameters fix I committed recently. The question is: has someone here used TCP keepalives as a substitute for application level heartbeating? Given the operating model of ZeroMQ, using TCP keepalives for this purpose would transparently shield the user from stale connections. Are there any downsides to this? TCP keepalives, when turned on, use a 2 hour interval by default (this is a de facto standard). This makes them impractical unless the values are adjusted. I've done some research on that. From what I've gathered, it seems that setting TCP keepalive parameters on a per-socket level is supported at least on the following operating systems:

 * Linux
 * FreeBSD
 * Windows (since Windows 2000; set only, read not supported; number of
   keepalive probes is fixed on 10; must be set before connecting;
   values in milliseconds, not seconds)
 * Mac OS X (since Mountain Lion)
 * AIX
 * Solaris (values in milliseconds, not seconds)

It seems that both iOS and Android support sending TCP keepalives, but setting keepalive parameters is not supported. Note that the Windows TCP keepalive parameters patch takes the time intervals in seconds and multiplies by 1000 on Windows for cross platform compatibility. There is no similar fix for Solaris yet so Solaris users need to do it on the application level for now.

Setting the keepalive idle and retransmission delay to values like 10 and 5 seconds would make a lot of sense to me. If the peer fails to respond to the probes, zmq will just see a disconnection.

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to