1. 程式人生 > >ZeroMQ介面函式之 :zmq_msg_send – 從一個socket傳送一個訊息幀

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]