I cannot find anywhere in the guide or RFC if when using REQ / REP sockets, suppose I successfully send a message through the REQ socket, does it guarantee that the REP socket got the message ?
If not how do you introduce single client/server reliability using timeouts when recv calls are not blocking (according to the RFC) on the REP socket.
If this sounds strange, feel free to re-read the Zen-of-Zero and enjoy these few design principles, which enabled the ZeroMQ become so low-latency, high-performance framework.
There is one indirect warranty - an atomic delivery - a message either gets delivered complete and error free, or not at all. I.e., there are no cases of getting any sort of crippled runts on the receiver side, yet, there is no warranty for a sender, if a message will get through.
There is a large space for user-implemented higher-layers, atop of ZeroMQ trivial protocol, that may introduce time-controlled requests for re-sending or other means for hardened delivery enforcement policies.