ZeroMQ介面函式之 :zmq_msg_send – 從一個socket傳送一個訊息幀
zmq_msg_send(3) ØMQ Manual - ØMQ/3.2.5
Name
zmq_msg_send – 從一個socket傳送一個訊息幀
Synopsis
int zmq_msg_send (zmq_msg_t *msg, void *socket, int flags);
Description
zmq_msg_send函式和zmq_sendmsg(3)函式是完全相同的,只是zmq_sendmsg(3)在以後的版本中會被棄用。zmq_msg_send()函式在操作性方面和其他訊息函式更有一致性。
zmq_msg_send()函式將會使用socket指定的socket,以佇列方式(FIFO)將msg引數指定的訊息新增到傳送佇列裡面。flags引數由下列標誌組合(|)而成:
ZMQ_DONTWAIT
指明本次操作使用非阻塞方式執行。如果這個訊息不能被新增到哦訊息佇列裡面,zmq_msg_send()函式會執行失敗,並設定errno的值為EAGAIN.。
ZMQ_SNDMORE
指明正在被髮送的訊息是個多幀訊息,並且後面還有更多的訊息會進行傳送。參見下面關於多幀訊息的章節,以獲取更詳細的資訊。
在呼叫zmq_msg_send()函式的時候,訊息結構zmq_msg_t是失效的。如果想把訊息傳送給多個socket,需要呼叫複製函先數複製這個訊息(比如zmq_msg_copy()函式)。
注意:呼叫zmq_msg_send()成功並不意味著訊息已經成功得傳送到網路上了,只能說明訊息已經新增到訊息佇列,ZMQ會確保訊息的傳送。
多幀訊息(Multi-part messages 具體怎麼翻譯我也不會。。。)
一個ZMQ訊息是由1個或多個幀組成的。每個訊息段都是一個對立的zmq_msg_t訊息結構。ZMQ確保對訊息進行原子交付:每個socket或者接收整個訊息,或者一個訊息幀也不接收。每個訊息中的幀數是不受限制的,除非記憶體不夠用了。
除了傳送最後一幀訊息,應用程序每次傳送訊息時必須使用ZMQ_SNDMORE標誌以傳送多幀訊息。
Return value
如果zmq_msg_send()函式執行成功則返回訊息中資料的長度。否則返回 -1,並且設定errno的值為下列值。
Errors
EAGAIN
在使用非阻塞模式傳送訊息的時候此訊息不可用。
ENOTSUP
zmq_msg_send()函式不支援此socket的型別。
EFSM
當socket處在不正確的狀態時,zmq_msg_send()操作無法執行。這中情況可能發生在一個socket在集中狀態間切換的時候,比如ZMQ_REP。請檢視zmq_socket(3) 函式的訊息模式章節獲得更多資訊。
ETERM
和socket相聯絡的ZMQ context被終結了。
ENOTSOCK
引數提供的socket不可用。
EINTR
在訊息傳送之前,操作被系統訊號中斷了。
EFAULT
引數提供的訊息不可用。
Example
向一個訊息物件寫入內容併發送
/* Create a new message, allocating 6 bytes for message content */
zmq_msg_t msg;
int rc = zmq_msg_init_size (&msg, 6);
assert (rc == 0);
/* Fill in message content with 'AAAAAA' */
memset (zmq_msg_data (&msg), 'A', 6);
/* Send the message to the socket */
rc = zmq_msg_send (&msg, socket, 0); assert (rc == 6);
傳送一個多幀訊息
/* Send a multi-part message consisting of three parts to socket */
rc = zmq_msg_send (&part1, socket, ZMQ_SNDMORE);
rc = zmq_msg_send (&part2, socket, ZMQ_SNDMORE);
/* Final part; no more parts to follow */ rc = zmq_msg_send (&part3, socket, 0);
See also
zmq_recv(3) zmq_send(3) zmq_msg_recv(3) zmq_socket(7) zmq(7)
Authors
This ØMQ manual page was written by Martin Sustrik <[email protected]> and Martin Lucina <[email protected]>, and Pieter Hintjens <[email protected]>.
Web site design and content is copyright (c) 2007-2012 iMatix Corporation. Contact us for professional support. Site content licensed under the Creative Commons Attribution-Share Alike 3.0 License. ØMQ is copyright (c) Copyright (c) 2007-2012 iMatix Corporation and Contributors. ØMQ is free software licensed under the LGPL. ØMQ, ZeroMQ, and 0MQ are trademarks of iMatix Corporation. Terms of Use — Privacy
Policy
翻譯:風波
mail : [email protected]