博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZeroMQ接口函数之 :zmq_recvmsg – 从一个socket上接收一个消息帧
阅读量:5889 次
发布时间:2019-06-19

本文共 2676 字,大约阅读时间需要 8 分钟。

ZeroMQ 官方地址 :

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 :

 

翻译:风波

mail : fengbohello@qq.com

 

转载地址:http://gffsx.baihongyu.com/

你可能感兴趣的文章
分页显示
查看>>
iOS中安全结束 子线程 的方法
查看>>
批处理学习笔记8 - 深入学习For命令1
查看>>
Object-c学习之路二(oc内存管理黄金法则1)
查看>>
python开发_python文件操作
查看>>
iPhone 已停用
查看>>
CSS3之边框图片border-image
查看>>
图片轮换cycle插件的运用
查看>>
【Oracle】两个表Join关联更新
查看>>
ActiveX控件的安全初始化和脚本操作 和 数字签名SIGN
查看>>
Eclipse console文本换行
查看>>
微信支付开发(11) Native支付
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
【设计模式】—— 代理模式Proxy
查看>>
ejabberd
查看>>
博客园博客自动生成三级目录(generate three levels content using JS in cnblogs)
查看>>
联通高管频频出走:通信业已成鸡肋?
查看>>
关于多线程的那些事
查看>>
js 将json字符串转换为json对象的方法解析
查看>>
1. Two Sum
查看>>