I spent quite a bit of time to look into a weird issue.
Here's my setup:
1 PUB socket connected to a STEERABLE PROXY FRONTED socket, using INPROC transport
1 SUB socket connected to the STEERABLE PROXY BACKEND socket, using TCP transport
Before starting stuff (i.e. calling zmq_connect() or zmq_bind()) I lower all HWMs (for both TX/RX) of all sockets to just "10". Moreover I set ZMQ_XPUB_NODROP=1.
Now my expected behaviour is that after 20 messages sent from the PUB socket, the zmq_send() on that PUB becomes blocking.
You may argue that since I have the XPUB/XSUB sockets of the proxy in the middle, the value after it becomes blocking is 40. That's ok.
The experimental result I found is that the PUB NEVER becomes blocking.
If I send 10000 messages from the PUB they all go through.
In the SUB I sleep 1 second after EVERY message received. It takes a while but in the end the SUB receives all the 10000 messages...
Is there an explanation for this? Who buffered all those messages (against my will) ?
Thanks for any hint!