ZeroMQ接口函數之 :zmq_recvmsg – 從一個socket上接收一個消息幀


ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-recvmsg

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)的ZMQ_RCVMORE選項進行檢查,以確定是否還有更多的消息等待接收。

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

 

更多 ZeroMQ API :http://www.cnblogs.com/fengbohello/p/4230135.html

 

翻譯:風波

mail : fengbohello@qq.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM