1、初始化消息
1.1 zmq_msg_init(3)
1.1.1 名稱
zmq_msg_init - 初始化空的ZMQ消息
1.1.2 概要
int zmq_msg_init(zmq_msg_t * msg);
1.1.3 描述
zmq_msg_init()函數將初始化由msg引用的消息對象,以表示一個空的消息。 在使用zmq_recv()接收消息之前調用此函數時最有用。切勿直接訪問zmq_msg_t成員,而應始終使用zmq_msg系列函數。函數zmq_msg_init(),zmq_msg_init_data()和zmq_msg_init_size()是互斥的。 永遠不要初始化相同的zmq_msg_t兩次。
1.1.4 返回值
zmq_msg_init()函數始終返回零。
1.1.5 錯誤
沒有定義錯誤。
1.2 zmq_msg_init_size(3)
1.2.1 名稱
zmq_msg_init_size - 初始化指定大小的ZMQ消息
1.2.2 概要
int zmq_msg_init_size(zmq_msg_t * msg,size_t size);
1.2.3 描述
zmq_msg_init_size()函數應分配存儲消息大小字節所需的任何資源,並初始化由msg引用的消息對象以表示新分配的消息。實現應選擇將消息內容存儲在堆棧(小消息)還是堆(大消息)上。出於性能原因,zmq_msg_init_size()不應清除消息數據。切勿直接訪問zmq_msg_t成員,而應始終使用zmq_msg系列函數。函數zmq_msg_init(),zmq_msg_init_data()和zmq_msg_init_size()是互斥的。永遠不要初始化相同的zmq_msg_t兩次。
1.2.4 返回值
如果成功,zmq_msg_init_size()函數將返回零。否則它將返回-1並將errno設置為下面定義的值之一。
1.2.5 錯誤
ENOMEM:沒有足夠的存儲空間可用。
1.3 zmq_msg_init_data(3)
1.3.1 名稱
zmq_msg_init_data - 從提供的緩沖區初始化ZMQ消息
1.3.2 概要
typedef void(zmq_free_fn)(void * data,void * hint);
int zmq_msg_init_data(zmq_msg_t * msg,void * data,size_t size,zmq_free_fn * ffn,void * hint);
1.3.3 描述
zmq_msg_init_data()函數將初始化由msg引用的消息對象,以表示位於地址數據處的緩沖區所引用的內容,大小為字節長。不得執行任何數據副本,ZMQ應取得所提供緩沖區的所有權。如果提供了,一旦數據緩沖區不再被ZMQ需要,數據和提示參數提供給zmq_msg_init_data(),就會調用解除分配函數ffn。切勿直接訪問zmq_msg_t成員,而應始終使用zmq_msg系列函數。解除分配函數ffn需要是線程安全的,因為它將從任意線程中調用。如果未提供釋放函數,則分配的內存不會被釋放,這可能會導致內存泄漏。函數zmq_msg_init(),zmq_msg_init_data()和zmq_msg_init_size()是互斥的。永遠不要初始化相同的zmq_msg_t兩次。
1.3.4 返回值
如果成功,zmq_msg_init_data()函數將返回零。否則它將返回-1並將errno設置為下面定義的值之一。
1.3.5 錯誤
ENOMEM:沒有足夠的存儲空間可用。
2、發送和接收消息
2.1 zmq_msg_send(3)
2.1.1 名稱
zmq_msg_send - 在套接字上發送消息部分
2.1.2 概要
int zmq_msg_send(zmq_msg_t * msg,void * socket,int flags);
2.1.3 描述
zmq_msg_send()函數與zmq_sendmsg(3)相同,在以后的版本中將不再使用。 zmq_msg_send()與其他消息操作函數更加一致。
zmq_msg_send()函數應該將由msg參數引用的消息排隊,以便發送到由socket參數引用的套接字。 flags參數是下面定義的標志的組合:
ZMQ_DONTWAIT:對於沒有可用對等體時(或者所有對等體都具有完全高水位標記)的阻塞的套接字類型(DEALER,PUSH),指定操作應該在非阻塞模式下執行。如果消息不能在套接字上排隊,則zmq_msg_send()函數將失敗,並將errno設置為EAGAIN。
ZMQ_SNDMORE:指定正在發送的消息是一個多部分消息,並且后續的消息部分將被遵循。有關詳細說明,請參閱下面有關多部分消息的部分。
傳遞給zmq_msg_send()的zmq_msg_t結構在調用期間無效。如果你想發送相同的消息到多個套接字,你必須復制它(例如使用zmq_msg_copy())。
注:成功調用zmq_msg_send()並不表示消息已傳輸到網絡,只是它已在套接字上排隊,並且ZMQ已承擔該消息的責任。 在成功執行zmq_msg_send()之后,不需要調用zmq_msg_close()。
2.1.4 多部分消息
ZMQ消息由1個或多個消息部分組成。每個消息部分都是獨立的zmq_msg_t。
ZMQ確保消息的原子傳遞:對等體應接收消息的所有消息部分或根本不接收消息。除可用內存以外,消息部分的總數不受限制。發送多部分消息的應用程序必須在發送除最后一部分之外的每個消息部分時使用ZMQ_SNDMORE標志。
2.1.5 返回值
如果成功,zmq_msg_send()函數將返回消息中的字節數。否則它將返回-1並將errno設置為下面定義的值之一。
2.1.6 錯誤
EAGAIN:請求非阻塞模式,此時不能發送消息。
ENOTSUP:此套接字類型不支持zmq_msg_send()操作。
EINVAL:發件人試圖發送套接字類型不允許的多部分數據。
EFSM:由於套接字未處於適當狀態,此時無法在此套接字上執行zmq_msg_send()操作。使用在幾種狀態之間切換的套接字類型(例如ZMQ_REP)可能會發生此錯誤。有關更多信息,請參閱zmq_socket(3)的消息傳遞模式部分。
ETERM:與指定套接字關聯的ZMQ上下文已終止。
ENOTSOCK:提供的套接字無效。
EINTR:信息發送前,信號傳遞中斷了操作。
EFAULT:無效的訊息。
EHOSTUNREACH:該消息無法路由。
2.2 zmq_msg_recv(3)
2.2.1 名稱
zmq_msg_recv - 從套接字接收消息部分
2.2.2 概要
int zmq_msg_recv(zmq_msg_t * msg,void * socket,int flags);
2.2.3 描述
zmq_msg_recv()函數與zmq_recvmsg(3)相同,在以后的版本中將不推薦使用。 zmq_msg_recv()與其他消息操作函數更加一致。
zmq_msg_recv()函數將從socket參數引用的套接字接收消息部分,並將其存儲在由msg參數引用的消息中。 之前存儲在msg中的任何內容應被正確釋放。 如果在指定的套接字上沒有可用的消息部分,則zmq_msg_recv()函數將被阻塞,直到請求得到滿足。 flags參數是下面定義的標志的組合:
ZMQ_DONTWAIT:指定操作應該在非阻塞模式下執行。 如果指定套接字上沒有可用消息,則zmq_msg_recv()函數將失敗,並將errno設置為EAGAIN。
2.2.4 多部分消息
ZMQ消息由1個或多個消息部分組成。每個消息部分都是獨立的zmq_msg_t。ZMQ確保消息的原子傳遞:對等體應接收消息的所有消息部分或根本不接收消息。除可用內存以外,消息部分的總數不受限制。處理多部分消息的應用程序必須在調用zmq_msg_recv()之后使用ZMQ_RCVMORE zmq_getsockopt(3)選項來確定是否還有其他部分要接收。
2.2.5 返回值
如果成功,zmq_msg_recv()函數將返回消息中的字節數。否則它將返回-1並將errno設置為下面定義的值之一。
2.2.6 錯誤
EAGAIN:請求非阻塞模式,目前沒有消息可用。
ENOTSUP:此套接字類型不支持zmq_msg_recv()操作。
EFSM:由於套接字未處於適當狀態,此時無法在此套接字上執行zmq_msg_recv()操作。使用在幾種狀態之間切換的套接字類型(例如ZMQ_REP)可能會發生此錯誤。有關更多信息,請參閱zmq_socket(3)的消息傳遞模式部分。
ETERM:與指定套接字關聯的ZMQ上下文已終止。
ENOTSOCK:提供的套接字無效。
EINTR:信息傳遞之前,該操作被傳遞信號中斷。
EFAULT:傳遞給該函數的消息無效。
2.3 zmq_send
2.3.1 名稱
zmq_send - 在套接字上發送消息部分
2.3.2 概要
int zmq_send(void * socket,void * buf,size_t len,int flags);
2.3.3 描述
zmq_send()函數應對從buf和len參數引用的緩沖區創建的消息進行排隊。 flags參數是下面定義的標志的組合:
ZMQ_DONTWAIT:對於沒有可用對等體時(或者所有對等體都具有完全高水位標記)的阻塞的套接字類型(DEALER,PUSH),指定操作應該在非阻塞模式下執行。 如果消息不能在套接字上排隊,則zmq_send()函數將失敗,並將errno設置為EAGAIN。
ZMQ_SNDMORE:指定正在發送的消息是一個多部分消息,並且后續的消息部分將被遵循。 有關詳細說明,請參閱下面有關多部分消息的部分。
注:成功調用zmq_send()並不表示消息已傳輸到網絡,只是它已在套接字上排隊,並且ZMQ已承擔了該消息的責任。
2.3.4 多部分消息
ZMQ消息由1個或多個消息部分組成。 ZMQ確保消息的原子傳遞:對等體應接收消息的所有消息部分或根本不接收消息。除可用內存以外,消息部分的總數不受限制。發送多部分消息的應用程序必須在發送除最后一部分之外的每個消息部分時使用ZMQ_SNDMORE標志。
2.3.5 返回值
如果成功,zmq_send()函數將返回消息中的字節數。否則它將返回-1並將errno設置為下面定義的值之一。
2.3.6 錯誤
EAGAIN:請求非阻塞模式,此時不能發送消息。
ENOTSUP:此套接字類型不支持zmq_send()操作。
EINVAL:發件人試圖發送套接字類型不允許的多部分數據。
EFSM:由於套接字未處於適當狀態,此時不能在此套接字上執行zmq_send()操作。使用在幾種狀態之間切換的套接字類型(例如ZMQ_REP)可能會發生此錯誤。有關更多信息,請參閱zmq_socket(3)的消息傳遞模式部分。
ETERM:與指定套接字關聯的ZMQ上下文已終止。
ENOTSOCK:提供的套接字無效。
EINTR:信息發送前,信號傳遞中斷了操作。
EHOSTUNREACH:該消息無法路由。
2.4 zmq_recv
2.4.1 名稱
zmq_recv - 從套接字接收消息部分
2.4.2 概要
int zmq_recv(void * socket,void * buf,size_t len,int flags);
2.4.3 描述
zmq_recv()函數將從套接字參數引用的套接字接收消息,並將其存儲在由buf參數引用的緩沖區中。任何超過len參數指定長度的字節都應該被截斷。如果在指定的套接字上沒有可用的消息,則zmq_recv()函數應該阻塞,直到滿足請求。 flags參數是下面定義的標志的組合:如果len為零,則buf參數可以為null。
ZMQ_DONTWAIT:指定操作應該在非阻塞模式下執行。如果指定套接字上沒有可用消息,則zmq_recv()函數將失敗,並將errno設置為EAGAIN。
2.4.4 多部分消息
ZMQ消息由1個或多個消息部分組成。 ZMQ確保消息的原子傳遞:對等體應接收消息的所有消息部分或根本不接收消息。除可用內存以外,消息部分的總數不受限制。
處理多部分消息的應用程序必須在調用zmq_recv()之后使用ZMQ_RCVMORE zmq_getsockopt(3)選項來確定是否還有其他部分要接收。
2.4.5 返回值
如果成功,zmq_recv()函數將返回消息中的字節數。請注意,如果郵件被截斷,該值可能會超過len參數的值。如果不成功,函數將返回-1並將errno設置為下面定義的值之一。
2.4.6 錯誤
EAGAIN:請求非阻塞模式,目前沒有消息可用。
ENOTSUP:此套接字類型不支持zmq_recv()操作。
EFSM:由於套接字未處於適當狀態,此時無法在此套接字上執行zmq_recv()操作。使用在幾種狀態之間切換的套接字類型(例如ZMQ_REP)可能會發生此錯誤。有關更多信息,請參閱zmq_socket(3)的消息傳遞模式部分。
ETERM:與指定套接字關聯的ZMQ上下文已終止。
ENOTSOCK:提供的套接字無效。
EINTR:信息傳遞之前,該操作被傳遞信號中斷。
2.5 zmq_send_const
2.5.1 名稱
zmq_send_const - 在套接字上發送一個常量內存消息部分
2.5.2 概要
int zmq_send_const(void * socket,void * buf,size_t len,int flags);
2.5.3 描述
zmq_send_const()函數將對由buf和len參數引用的緩沖區創建的消息進行排隊。 消息緩沖區被假定為常量內存,因此不會被以任何方式復制或解除分配。
flags參數是下面定義的標志的組合:
ZMQ_DONTWAIT:對於沒有可用對等體時(或者所有對等體都具有完全高水位標記)的阻塞的套接字類型(DEALER,PUSH),指定操作應該在非阻塞模式下執行。 如果消息不能在套接字上排隊,則zmq_send_const()函數將失敗,並將errno設置為EAGAIN。
ZMQ_SNDMORE:指定正在發送的消息是一個多部分消息,並且后續的消息部分將被遵循。 有關詳細說明,請參閱下面有關多部分消息的部分。
注:成功調用zmq_send_const()並不表示消息已傳輸到網絡,只是它已在套接字上排隊,並且ZMQ已承擔該消息的責任。
2.5.4 多部分消息
ZMQ消息由1個或多個消息部分組成。 ZMQ確保消息的原子傳遞:對等體應接收消息的所有消息部分或根本不接收消息。除可用內存以外,消息部分的總數不受限制。
發送多部分消息的應用程序必須在發送除最后一部分之外的每個消息部分時使用ZMQ_SNDMORE標志。
2.5.5 返回值
如果成功,zmq_send_const()函數將返回消息中的字節數。否則它將返回-1並將errno設置為下面定義的值之一。
2.5.6 錯誤
EAGAIN:請求非阻塞模式,此時不能發送消息。
ENOTSUP:此套接字類型不支持zmq_send_const()操作。
EFSM:由於套接字未處於適當狀態,此時不能在此套接字上執行zmq_send_const()操作。使用在幾種狀態之間切換的套接字類型(例如ZMQ_REP)可能會發生此錯誤。有關更多信息,請參閱zmq_socket(3)的消息傳遞模式部分。
ETERM:與指定套接字關聯的ZMQ上下文已終止。
ENOTSOCK:提供的套接字無效。
EINTR:信息發送前,信號傳遞中斷了操作。
EHOSTUNREACH:該消息無法路由。
2.6 zmq_recvmsg(廢棄)
2.6.1 名稱
zmq_recvmsg - 從套接字接收消息部分
2.6.2 概要
int zmq_recvmsg(void * socket,zmq_msg_t * msg,int flags);
2.6.3 描述
zmq_recvmsg()函數將從socket參數引用的套接字接收消息部分,並將其存儲在由msg參數引用的消息中。 之前存儲在msg中的任何內容應被正確釋放。 如果在指定套接字上沒有可用的消息部分,則zmq_recvmsg()函數應該阻塞,直到請求得到滿足。 flags參數是下面定義的標志的組合:
ZMQ_DONTWAIT:指定操作應該在非阻塞模式下執行。 如果指定套接字上沒有可用消息,則zmq_recvmsg()函數將失敗,並將errno設置為EAGAIN。
注:此API方法已棄用,以支持zmq_msg_recv(3)。
2.6.4 多部分消息
ZMQ消息由1個或多個消息部分組成。每個消息部分都是獨立的zmq_msg_t。 ZMQ確保消息的原子傳遞:對等體應接收消息的所有消息部分或根本不接收消息。除可用內存以外,消息部分的總數不受限制。處理多部分消息的應用程序必須在調用zmq_recvmsg()之后使用ZMQ_RCVMORE zmq_getsockopt(3)選項來確定是否還有其他部分要接收。
2.6.5 返回值
如果成功,zmq_recvmsg()函數將返回消息中的字節數。否則它將返回-1並將errno設置為下面定義的值之一。
2.6.6 錯誤
EAGAIN:請求非阻塞模式,目前沒有消息可用。
ENOTSUP:此套接字類型不支持zmq_recvmsg()操作。
EFSM:由於套接字未處於適當狀態,此時不能在此套接字上執行zmq_recvmsg()操作。使用在幾種狀態之間切換的套接字類型(例如ZMQ_REP)可能會發生此錯誤。有關更多信息,請參閱zmq_socket(3)的消息傳遞模式部分。
ETERM:與指定套接字關聯的ZMQ上下文已終止。
ENOTSOCK:提供的套接字無效。
EINTR:信息傳遞之前,該操作被傳遞信號中斷。
EFAULT:傳遞給該函數的消息無效。
2.7 zmq_sendmsg(廢棄)
2.7.1 名稱
zmq_sendmsg - 在套接字上發送消息部分
2.7.2 概要
int zmq_sendmsg(void * socket,zmq_msg_t * msg,int flags);
2.7.3 描述
zmq_sendmsg()函數應該將由msg參數引用的消息排隊,以便發送到由socket參數引用的套接字。 flags參數是下面定義的標志的組合:
ZMQ_DONTWAIT:對於沒有可用對等體時(或者所有對等體都具有完全高水位標記)的阻塞的套接字類型(DEALER,PUSH),指定操作應該在非阻塞模式下執行。如果消息不能在套接字上排隊,則zmq_sendmsg()函數將失敗,並將errno設置為EAGAIN。
ZMQ_SNDMORE:指定正在發送的消息是一個多部分消息,並且后續的消息部分將被遵循。有關詳細說明,請參閱下面有關多部分消息的部分。
傳遞給zmq_sendmsg()的zmq_msg_t結構在調用期間無效。如果你想發送相同的消息到多個套接字,你必須復制它(例如使用zmq_msg_copy())。
注:成功調用zmq_sendmsg()並不表示消息已傳輸到網絡,只是它已在套接字上排隊,並且ZMQ已承擔該消息的責任。
此API方法已棄用,以支持zmq_msg_send(3)。
2.7.4 多部分消息
ZMQ消息由1個或多個消息部分組成。每個消息部分都是獨立的zmq_msg_t。 ZMQ確保消息的原子傳遞:對等體應接收消息的所有消息部分或根本不接收消息。除可用內存以外,消息部分的總數不受限制。發送多部分消息的應用程序必須在發送除最后一部分之外的每個消息部分時使用ZMQ_SNDMORE標志。
2.7.5 返回值
如果成功,zmq_sendmsg()函數將返回消息中的字節數。否則它將返回-1並將errno設置為下面定義的值之一。
2.7.6 錯誤
EAGAIN:請求非阻塞模式,此時不能發送消息。
ENOTSUP:此套接字類型不支持zmq_sendmsg()操作。
EINVAL:發件人試圖發送套接字類型不允許的多部分數據。
EFSM:由於套接字未處於適當的狀態,此時不能在此套接字上執行zmq_sendmsg()操作。使用在幾種狀態之間切換的套接字類型(例如ZMQ_REP)可能會發生此錯誤。有關更多信息,請參閱zmq_socket(3)的消息傳遞模式部分。
ETERM:與指定套接字關聯的ZMQ上下文已終止。
ENOTSOCK:提供的套接字無效。
EINTR:信息發送前,信號傳遞中斷了操作。
EFAULT:無效的訊息。
EHOSTUNREACH:該消息無法路由。
3、關閉消息
3.1 zmq_msg_close(3)
3.1.1 名稱
zmq_msg_close - 釋放ZMQ消息
3.1.2 概要
int zmq_msg_close(zmq_msg_t * msg);
3.1.3 描述
zmq_msg_close()函數應通知ZMQ基礎設施:與msg引用的消息對象相關聯的任何資源不再需要並可以被釋放。 與消息對象相關的資源的實際釋放應由ZMQ推遲,直到消息或基礎數據緩沖區的所有用戶都表示不再需要為止。一旦消息不再需要,應用程序應確保調用zmq_msg_close(),否則可能會發生內存泄漏。 請注意,在成功執行zmq_msg_send()后,這不是必需的。切勿直接訪問zmq_msg_t成員,而應始終使用zmq_msg系列函數。
3.1.4 返回值
如果成功,zmq_msg_close()函數將返回零。 否則它將返回-1並將errno設置為下面定義的值之一。
3.1.5 錯誤
EFAULT:無效的訊息。
4、訪問消息內容
4.1 zmq_msg_data(3)
4.1.1 名稱
zmq_msg_data - 檢索指向消息內容的指針
4.1.2 概要
void * zmq_msg_data(zmq_msg_t * msg);
4.1.3 描述
zmq_msg_data()函數將返回一個指向由msg引用的消息對象的消息內容的指針。切勿直接訪問zmq_msg_t成員,而應始終使用zmq_msg系列函數。
4.1.4 返回值
成功完成后,zmq_msg_data()應返回一個指向消息內容的指針。
4.1.5 錯誤
沒有定義錯誤。
4.2 zmq_msg_size(3)
4.2.1 名稱
zmq_msg_size - 以字節為單位檢索郵件內容大小
4.2.2 概要
size_t zmq_msg_size(zmq_msg_t * msg);
4.2.3 描述
zmq_msg_size()函數將返回由msg引用的消息對象內容的大小(以字節為單位)。切勿直接訪問zmq_msg_t成員,而應始終使用zmq_msg系列函數。
4.2.4 返回值
成功完成后,zmq_msg_size()應以字節為單位返回消息內容的大小。
4.2.5 錯誤
沒有定義錯誤。
4.3 zmq_msg_more(3)
4.3.1 名稱
zmq_msg_more - 指示是否有更多的消息部分要接收
4.3.2 概要
int zmq_msg_more(zmq_msg_t * message);
4.3.3 描述
zmq_msg_more()函數指示這是否是多部分消息的一部分,並且還有其他部分可以接收。 這個方法可以在zmq_msg_close()之后被安全地調用。 此方法與zmq_msg_get()的參數相同,參數為ZMQ_MORE。
4.3.4 返回值
如果這是多部分消息的最后部分,或者是單部分消息的唯一部分,則zmq_msg_more()函數應該返回零。 如果還有其他零件需要收到,它將返回1。
5、使用消息屬性
5.1 zmq_msg_gets(3)
5.1.1 名稱
zmq_msg_gets - 獲取消息元數據屬性
5.1.2 概要
const char * zmq_msg_gets(zmq_msg_t * message,const char * property);
5.1.3 描述
zmq_msg_gets()函數將返回由message參數指向的消息的屬性參數指定的元數據屬性的字符串值。 屬性參數和值都是以NULL結尾的UTF8編碼的字符串。如<rfc.zeromq.org/spec:37>中所指定的,在ZeroMQ連接握手期間,元數據在每個連接的基礎上定義。
可以使用zmq_msg_gets()函數檢索以下ZMTP屬性:
Socket-Type
Identity
Resource
此外,當可用於底層傳輸時,Peer-Address屬性將返回由getnameinfo(2)返回的遠程端點的IP地址。其他屬性可以基於基礎安全機制來定義,請參見下面的ZAP認證連接示例。
5.1.4 返回值
如果成功,zmq_msg_gets()函數將返回屬性的字符串值。 否則它將返回NULL並將errno設置為下面定義的值之一。 調用者不得修改或釋放返回值,該值將由消息擁有。 屬性和值的編碼應為UTF8。
5.1.5 錯誤
EINVAL:所要求的屬性是未知的。
5.2 zmq_msg_get(3)
5.2.1 名稱
zmq_msg_get - 獲取消息屬性
5.2.2 概要
int zmq_msg_get(zmq_msg_t * message,int property);
5.2.3描述
zmq_msg_get()函數將返回由message參數指向的消息的屬性參數指定的屬性的值。
可以使用zmq_msg_get()函數檢索以下屬性:
ZMQ_MORE:表示在消息之后有更多的消息幀。
ZMQ_SRCFD:返回從中讀取消息的套接字的文件描述符。這允許應用程序通過getpeername(2)檢索遠程端點。請注意,相應的套接字可能已經關閉,甚至重復使用。目前僅適用於TCP套接字。
ZMQ_SHARED:指示消息可以與此消息的另一個副本共享底層存儲。
5.2.4 返回值
如果成功,zmq_msg_get()函數將返回屬性的值。否則它將返回-1並將errno設置為下面定義的值之一。
5.2.5 錯誤
EINVAL:所要求的屬性是未知的。
5.3 zmq_msg_set(3)
5.3.1 名稱
zmq_msg_set - 設置消息屬性
5.3.2 概要
int zmq_msg_set(zmq_msg_t * message,int property,int value);
5.3.3 描述
zmq_msg_set()函數應將property參數指定的屬性設置為message參數指向的ZMQ消息片段的value參數的值。目前,zmq_msg_set()函數不支持任何屬性名稱。
5.3.4 返回值
如果成功,zmq_msg_set()函數將返回零。 否則它將返回-1並將errno設置為下面定義的值之一。
5.3.5 錯誤
EINVAL:所要求的屬性不明。
6、消息操作
6.1 zmq_msg_copy(3)
6.1.1 名稱
zmq_msg_copy - 將消息的內容復制到另一個消息
6.1.2 概要
int zmq_msg_copy(zmq_msg_t * dest,zmq_msg_t * src);
6.1.3 描述
zmq_msg_copy()函數應將由src引用的消息對象復制到由dest引用的消息對象。 dest的原始內容,如果有的話,應該被釋放。復制之前,您必須初始化dest。實現可以選擇不物理復制消息內容,而是在src和dest之間共享底層緩沖區。使用zmq_msg_copy()復制消息后,請避免修改消息內容,否則可能會導致未定義的行為。如果您需要的是實際的硬拷貝,請使用zmq_msg_init_size()分配新消息,並使用memcpy()復制消息內容。切勿直接訪問zmq_msg_t成員,而應始終使用zmq_msg系列函數。
6.1.4 返回值
如果成功,zmq_msg_copy()函數將返回零。否則它將返回-1並將errno設置為下面定義的值之一。
6.1.5 錯誤
EFAULT:無效的訊息。
6.2 zmq_msg_move(3)
6.2.1 名稱
zmq_msg_move - 將消息的內容移動到另一個消息
6.2.2 概要
int zmq_msg_move(zmq_msg_t * dest,zmq_msg_t * src);
6.2.3 描述
zmq_msg_move()函數應將由src引用的消息對象的內容移動到由dest引用的消息對象。 不執行消息內容的實際復制,只是更新dest以引用新內容。 調用zmq_msg_move()后,src將變為空信息。 dest的原始內容,如果有的話,應該被釋放。切勿直接訪問zmq_msg_t成員,而應始終使用zmq_msg系列函數。
6.2.4 返回值
如果成功,zmq_msg_move()函數將返回零。 否則它將返回-1並將errno設置為下面定義的值之一。
6.2.5 錯誤
EFAULT:無效的訊息。