ZeroMQ接口函数之 :zmq_poll - I/O多路技术
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_poll
zmq_poll(3) ØMQ Manual - ØMQ/4.1.0
Name
zmq_poll - I/O多路技术
Synopsis
int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout);
Description
zmq_poll()函数为应用程序提供了一种对一组socket进行多路I/O事件水平触发的机制。items参数指向的数组中的每一个元素都是一个zmq_pollitem_t结构体。nitems参数指定了items数组里面的元素个数。zmq_pollitem_t结构的敌营如下所示:
typedef struct
{
void //*socket//;
int //fd//;
short //events//;
short //revents//;
} zmq_pollitem_t;
对每一个zmq_pollitem_t项,zmq_poll()函数都会对socket指定的socket或者fd指定的标准socket文件描述符检查其events.参数。如果socket和fd的值都进行了设置,则socket参数指定的ZMQ socket会进行优先检查,fd则会被忽略。
对每一个zmq_pollitem_t项,zmq_poll() 函数会首先清除 revents成员变量,然后为任何发生了改变的事件设置当前事件对应的位来指明哪个事件发生了什么变化。
如果在zmq_pollitem_t项中,没有一个请求事件发生,zmq_poll()函数将会等待timeout毫秒后返回。如果timeout参数的值是0,zmq_poll()函数会立即返回。如果timeout值是 -1,zmq_poll()则会进入无限阻塞等待状态,直到至少一个zmq_pollitem_t项上请求的事件发生了。
zmq_pollitem_t结构中的events和revents成员是由以下标志进行位与和或操作组成的:
ZMQ_POLLIN
对于ZMQ socket来说,至少有一个消息在这个socket上被非阻塞的接收到了。对于标准socket来说,此标志和系统调用的poll()函数的POLLIN标志等价,而且通常意味着,fd文件描述符上至少非阻塞的接收到了1B的数据。
ZMQ_POLLOUT
对于ZMQ socket来说,至少有一个消息使用非阻塞模式发送了。对于标准socket来说,此标志和系统调用poll()函数的POLLOUT标志等价,这通常意味着至少有1B的数据使用非阻塞模式写到了fd文件描述符里面。
ZMQ_POLLERR
对于标准socket来说,这个标志通过zmq_poll()传递给底层的系统调用poll(),通常此标志意味着fd上出现了一些错误。对于ZMQ socket来说,这个标志在events中不会造成影响,而且此标志不会出现在revents中被zmq_poll()返回。
字应用的时候应该优先使用zmq_poll()而不是系统调用poll()。在使用poll()函数的时候有些方法可能会受到本文档中没有定义的限制。
Return value
如果执行成功,zmq_poll()函数会返回被标记了事件的zmq_pollitem_t结构体的数目,如果返回0,说明没有事件发生。如果执行失败,则返回 -1, 并且设置errno的值为下列定义的值。
Errors
ETERM
在items给出的数组中,至少有一个socket相联系的ZMQ context已经被终结了。
EFAULT
items参数不可用(NULL)
EINTR
在任何事件响应之前,这个操作被系统信号中断了。
Example
阻塞方式响应ZMQ socket和标准系统socket
zmq_pollitem_t items [];
/* First item refers to ØMQ socket 'socket' */
items[].socket = socket;
items[].events = ZMQ_POLLIN;
/* Second item refers to standard socket 'fd' */
items[].socket = NULL;
items[].fd = fd;
items[].events = ZMQ_POLLIN;
/* Poll for events indefinitely */
int rc = zmq_poll (items, , -);
assert (rc >= ); /* Returned events will be stored in items[].revents */
See also
zmq_socket(3) zmq_send(3) zmq_recv(3) zmq(7)
你操作系统中对poll()系统调用的文档。
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
更多 ZeroMQ API :http://www.cnblogs.com/fengbohello/p/4230135.html
翻译:风波
mail : fengbohello@qq.com
ZeroMQ接口函数之 :zmq_poll - I/O多路技术的更多相关文章
- ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核
官方网址:http://api.zeromq.org/4-0:zmq zmq(7) 0MQ Manual - 0MQ/3.2.5 Name zmq – ØMQ 轻量级消息传输内核 Synopsis # ...
- ZeroMQ接口函数之 :zmq_bind - 绑定一个socket
ZeroMQ 官方地址 : http://api.zeromq.org/4-0:zmq-bind zmq_bind(3) ZMQ Manual - ZMQ/3.2.5 Name zmq_bind - ...
- ZeroMQ接口函数之 :zmq_connect - 由一个socket创建一个对外连接
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_connect zmq_connect(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_c ...
- ZeroMQ接口函数之 :zmq_curve – 安全的认证方式和保密方式
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve zmq_curve(7) ØMQ Manual - ØMQ/4.1.0 Name zmq_curve ...
- ZeroMQ接口函数之 :zmq_tcp – 使用TCP协议的ØMQ网络单播协议
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-tcp zmq_tcp(7) ØMQ Manual - ØMQ/4.1.0 Name zmq_t ...
- ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
- ZeroMQ接口函数之 :zmq_socket – 创建ZMQ套接字
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ZeroMQ 官方地址:http://api.zeromq.org/4 ...
- ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html 本文地址 :http://www.cnblogs.com/fengbo ...
- ZeroMQ接口函数之 :zmq_getsockopt – 获取ZMQ socket的属性
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html 本文地址 :http://www.cnblogs.com/fengbo ...
随机推荐
- tail -f 和 -F 的用法
tail -f 和 -F 的用法 Tai 2010-08-16 16:03:18 -f 是--follow[=HOW]的缩写, 可以一直读文件末尾的字符并打印出来."[=HOW]" ...
- Excel 实用技巧之一
1.在单元格内换行: Alt+Enter 2.合并其他单元格文字并换行: A1&char(10)&B1 3.Excel计算样本估算总体方差:STDEV/STDEVA(),分母为n-1. ...
- [Scala] 快学Scala A2L2
集合 13.1 集合的三大类 所有的集合都扩展Iterable特质.集合的三大集合为Seq, Set, Map Seq是一个有先后次序的值的序列,比如数组或列表.IndexSeq允许我们通过整型下表快 ...
- CF memsql Start[c]UP 2.0 A
CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...
- saltstack(master迁移)
环境:http://www.cnblogs.com/zzzhfo/p/6126223.html 在添加一台master 把master的/etc/salt目录下的pki打包 上传至第二台master的 ...
- 【Python基础学习五】列表,元祖,字典
1.列表(list) 列表是Python的一种内置数据类型,list是一种有序的集合,可以随时添加和删除其中的元素,就像动态数组一样.获取list中的元素用角标获取,角标可以使用正角标,也可以使用负角 ...
- Mysql数据库的使用总结之Innodb简介(一)
最近在对开发的软件的服务器部分制作安装包,但服务器部分需要有mysql数据库的支持.因此,采用免安装版的mysql策略:将mysql数据库需要的文件在安装程序中进行设置和打包即可.但也遇到了很多 ...
- ecshop常用二次开发修改
修改ecshop支付宝的支付按钮 http://www.68ecshop.com/article-1081.html 去掉ecshop收货人信息页面的电子邮件必填和电话.手机选填一个 http:/ ...
- MySQL MHA 搭建&测试
一:背景介绍 MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移.虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可 ...
- Redis Sentinel 高可用实现说明
背景: 前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...