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 [2]; /* First item refers to ØMQ socket 'socket' */ items[0].socket = socket; items[0].events = ZMQ_POLLIN; /* Second item refers to standard socket 'fd' */ items[1].socket = NULL; items[1].fd = fd; items[1].events = ZMQ_POLLIN; /* Poll for events indefinitely */
int rc = zmq_poll (items, 2, -1); assert (rc >= 0); /* 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