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

ZeroMQ介面函式之 :zmq_sendmsg – 從一個socket上傳送一個訊息幀

zmq_sendmsg(3)        ØMQ Manual - ØMQ/4.1.0

Name

zmq_sendmsg – 從一個socket上傳送一個訊息幀

Synopsis

int zmq_sendmsg (void *socket, zmq_msg_t *msg, int flags);

Description

zmq_sendmsg()函式會把msg引數指定的訊息物件新增到socket引數指定的socket上,等待將其傳送。flags引數是由下列flag組合成的。

  ZMQ_DONTWAIT

    此選項適用於當socket沒有連結到另一端而使操作進入阻塞模式的socket型別(DEALER,PUSH),指定操作以非阻塞模式執行。當訊息無法新增到指定的socket的佇列上時,函式zmq_sendmsg()執行失敗並設定errno的值為EAGAIN。

  ZMQ_SNDMORE

    指定當前要傳送的訊息是一個多幀訊息的其中以幀,並且此訊息後還會有更多的訊息幀要進行傳送。參見下面關於多幀訊息的章節以獲取更多資訊。

使用zmq_sendmsg()函式傳送訊息的,被髮送的zmq_msg_t結構體是無效的。如果你想要把這個訊息傳送給多個socket,你需要使用zmq_msg_copy()等函式複製一份。

成功呼叫了zmq_sendmsg()並不意味著訊息已經成功傳送到了網路上,只能說明訊息已經新增到了socket的訊息佇列中,並且由ZMQ開始接管這個訊息。
這個API已經廢棄了,推薦使用zmq_msg_send(3)函式。

Multi-part messages

一個ZMQ訊息由1個或多個ZMQ訊息幀組成。ZMQ保證自動交付訊息:一個ZMQ的訊息要麼所有的訊息幀都被接收,要麼一個都不會接收。一個訊息中訊息幀的總數沒有限制,除非記憶體不夠用。

當應用程式在傳送多幀訊息的時候,出了最後一次傳送訊息幀,每一次都要使用ZMQ_SNDMORE引數。

Return value

如果zmq_sendmsg()函式執行成功返回傳送的訊息位元組數。否則返回 -1, 並且設定errno的值為下列定義的值。

Errors

  EAGAIN

    使用非阻塞模式進行操作,並且當前這個訊息不可用。

  ENOTSUP

    socket型別不支援zmq_sendmsg()函式的操作。

  EFSM

    由於socket當前處於不適當的狀態,導致zmq_sendmsg()函式的操作無法進行。這個錯誤可能出現在經常在幾種狀態間進行切換的socket型別上,比如ZMQ_REP。參見zmq_socket(3)函式中的訊息模式章節以獲取更多資訊。

  ETERM

    與socket相聯絡的context被終結了。

  ENOTSOCK

    引數提供的socket不可用。

  EINTR

    此次操作在訊息傳送之前被系統訊號中斷了。

  EFAULT

    引數提供的訊息不可用。

  EHOSTUNREACH

    這個訊息無法被路由。

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_sendmsg (socket, &msg, 0); 
assert (rc == 6);

  傳送一個多幀訊息

/* Send a multi-part message consisting of three parts to socket */
rc = zmq_sendmsg (socket, &part1, ZMQ_SNDMORE);
rc = zmq_sendmsg (socket, &part2, ZMQ_SNDMORE);
/* Final part; no more parts to follow */
rc = zmq_sendmsg (socket, &part3, 0);

See also

zmq_recv(3)  zmq_socket(7)  zmq(7)

Authors

This page was written by the ØMQ community. To make a change please read the ØMQ Contribution Policy at http://www.zeromq.org/docs:contributing.

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]