I was wrong that zmq_msg_copy does not destroy the original message. It just does a shadow copy. Still it is better to indicate if the functions might change the original message at API level.