Hello, I'm looking for some clarification on how the ZMQ_XPUB_NODROP socket option is supposed to work with multi-part messages.
The documentation says the following : ZMQ_XPUB_NODROP: do not silently drop messages if SENDHWM is reached Sets the *XPUB* socket behaviour to return error EAGAIN if SENDHWM is reached and the message could not be send. A value of 0 is the default and drops the message silently when the peers SNDHWM is reached. A value of 1 returns an *EAGAIN* error code if the SNDHWM is reached and ZMQ_DONTWAIT was used. My observations indicate that when using this socket option with multi-part messages, it seems that if I don't continually try to resend the message part that returned EAGAIN, it's possible that part, but not all, of a multi-part message may be transmitted, which seems to violate the guarantee that peers will receive all parts of a message, or none at all. My question is, what is the correct behaviour when using this socket option? Should users try to send failed the message part forever until it succeeds (or fails with a different errno set)? If so, I think the documentation here could be a bit clearer about that. If that is not the intended behaviour, I can try to create a minimal reproducer that illustrates this problem, and file a formal bug. thanks! Sean
_______________________________________________ zeromq-dev mailing list [email protected] https://lists.zeromq.org/mailman/listinfo/zeromq-dev
