diff --git a/common/ZMQWrappers.cpp b/common/ZMQWrappers.cpp index adc1886a..0e110474 100644 --- a/common/ZMQWrappers.cpp +++ b/common/ZMQWrappers.cpp @@ -95,10 +95,14 @@ bool ZMQSocket::SendZeroCopy(void *data, size_t size,void (*callback)(void *, vo } auto result = zmq_msg_send(&msg, socket, (blocking ? 0 : ZMQ_DONTWAIT)); - zmq_msg_close(&msg); - if (result == size) - return true; + // https://libzmq.readthedocs.io/en/latest/zmq_msg_send.html + // zmq_msg_close only if it fails to send + if (result >= 0) + return true; // msg is now owned by ZMQ — do NOT close it + + // Send failed — we must close the message ourselves + zmq_msg_close(&msg); if ((errno == EAGAIN) || (errno == EINTR)) return false;