ZeroMQ介面函式之 :zmq_recvmsg – 從一個socket上接收一個訊息幀
zmq_recvmsg(3) ØMQ Manual - ØMQ/4.1.0
Name
zmq_recvmsg – 從一個socket上接收一個訊息幀
Synopsis
int zmq_recvmsg (void *socket, zmq_msg_t *msg, int flags);
Description
函式zmq_recvmsg()會從socket引數指定的socket中接收一個訊息,並將其儲存在msg引數指定的訊息訊息物件中。所有之前儲存在msg中的內容都會被適當的釋放。如果socket引數指定的socket上沒有接收到訊息,zmq_recvmsg()函式會進行阻塞等待,直到請求被滿足。flags引數由下面定義的標誌組合而成。
ZMQ_DONTWAIT
指定本次操作以非阻塞模式執行。如果socket上此刻沒有接收到訊息,zmq_recvmsg()函式會執行失敗,並設施errno的值為EAGAIN。
此API已被棄用,建議使用zmq_msg_recv(3)函式。
Multi-part messages
一個ZMQ訊息由1個或多個ZMQ訊息幀組成。每一個訊息幀都是一個獨立的訊息物件。ZMQ保證自動交付訊息:一個ZMQ的訊息要麼所有的訊息幀都被接收,要麼一個都不會接收。一個訊息中訊息幀的總數沒有限制,除非記憶體不夠用。
應用程序在使用多幀訊息時,呼叫zmq_recvmsg()函式之後必須使用zmq_getsockopt(3)
Return value
當zmq_recvmsg()函式執行成功後會返回接收到的訊息位元組數。否則函式返回 -1,並且設定errno的值為下列值。
Errors
EAGAIN
使用非阻塞方式接收訊息時,當前socket上沒有訊息可用。
ENOTSUP
給定socket的型別不支援zmq_recvmsg()函式的操作。
EFSM
由於socket處在不適當的狀態,zmq_recvmsg()函式無法對這個socket執行本次操作。這個錯誤會發生在當socket狀態在幾種狀態間進行轉變的過程中,比如ZMQ_REP型別的socket。參見zmq_socket(3)
ETERM
與給定的socket相聯絡的context被終結了。
ENOTSOCK
引數給定的socket不可用。
EINTR
在接收到訊息之前,本次操作被系統訊號中斷了。
EFAULT
引數指定的msg物件不可用。
Example
從一個socket上接收一個訊息
/* Create an empty ØMQ message *
zmq_msg_t msg;
int rc = zmq_msg_init (&msg);
assert (rc == 0);
/* Block until a message is available to be received from socket */
rc = zmq_recvmsg (socket, &msg, 0);
assert (rc != -1);
/* Release message */
zmq_msg_close (&msg);
接收一個多幀訊息
int64_t more;
size_t more_size = sizeof (more);
do {
/* Create an empty ØMQ message to hold the message part *
zmq_msg_t part;
int rc = zmq_msg_init (&part);
assert (rc == 0);
/* Block until a message is available to be received from socket */
rc = zmq_recvmsg (socket, &part, 0);
assert (rc != -1);
/* Determine if more message parts are to follow */
rc = zmq_getsockopt (socket, ZMQ_RCVMORE, &more, &more_size);
assert (rc == 0);
zmq_msg_close (&part);
} while (more);
See also
zmq_recv(3) zmq_send(3) zmq_getsockopt(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 14-1-8 zmq_recvmsg(3) - 0MQ Api api.zeromq.org/4-1:zmq-recvmsg 3/3
under the LGPL. ØMQ, ZeroMQ, and 0MQ are trademarks of iMatix Corporation. Terms of Use — Privacy
Policy
翻譯:風波
mail : [email protected]