I have a problem with ZMQ_LINGER not behaving as documented. https://gist.github.com/sorenh/4441ffaaf6a7f81818a3
If you compile and run that application with a small value like 1000 as its argument, everything is fine. The sender sends the message and the receiver receives it and both terminate. However, if the message size is quite large (I use 50000000 to reproduce it locally), the sender will say that it has sent the message and terminate, but the receiver will sit there forever, waiting for a message. I've tested it against Zmq 4.0.4 as well as master. We first noticed this problem across our LAN where it was much easier to reproduce. Any message that exceeded 2*net.core.wmem_max would not make it to the receiver. It appears that the connection is terminated immediately when the sender calls zmq_close(), regardless of the fact that the message has yet to be fully sent. Presumably, single messages usually fit in the tcp buffer, so a single sendto() syscall will fill suffice, but if multiple sendto() calls are needed, the connection might be terminated in the mean time. ZMQ_LINGER = -1 as well as ZMQ_LINGER = 5000 both yielded same result. I imagine something in the linger logic fails to take this case into account, but I've not been able to find the culprit. There's already https://zeromq.jira.com/browse/LIBZMQ-551 and https://zeromq.jira.com/browse/LIBZMQ-554 filed about the issue and there was a mailing list discussion back in 2013 about it: http://lists.zeromq.org/pipermail/zeromq-dev/2013-July/022199.html ...but no solution has appeared. I think this is a critical issue. The documentation promises that these messages will be delivered, but the reality is different. For now, we've resorted to boosting the size of the buffers, but it's only a matter of time before someone decides to send even bigger messages and then we have the same problem which was very hard to track down to begin with. What can I do to help solve this issue? Soren Hansen _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
