The value of the timeout (2 secs) should be way more than sufficient, especially locally. Just wondering if it might be 0 by default. If the receive is non-blocking then yes, would need to loop it, as it would return immediately. Not sure how those ZMQ behaviors are encapsulated.