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.參數。如果socketfd的值都進行了設置,則socket參數指定的ZMQ socket會進行優先檢查,fd則會被忽略。

對每一個zmq_pollitem_t項,zmq_poll() 函數會首先清除 revents成員變量,然后為任何發生了改變的事件設置當前事件對應的位來指明哪個事件發生了什么變化。

如果在zmq_pollitem_t項中,沒有一個請求事件發生,zmq_poll()函數將會等待timeout毫秒后返回。如果timeout參數的值是0zmq_poll()函數會立即返回。如果timeout值是 -1zmq_poll()則會進入無限阻塞等待狀態,直到至少一個zmq_pollitem_t項上請求的事件發生了。

zmq_pollitem_t結構中的eventsrevents成員是由以下標志進行位與和或操作組成的:

  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

 


免責聲明!

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



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