We are using zmq_msg_init_data to create messages since we allocate the underlying buffers using a pool to avoid dynamic memory allocation. However, this is defeated by the implementation of zmq_msg_init_data using malloc for its control_t structure.