天天看點

ZeroMQ接口函數之 :zmq_poll - I/O多路技術

Name

zmq_poll - I/O多路技術

Synopsis

Description

zmq_poll()函數為應用程式提供了一種對一組socket進行多路I/O事件水準觸發的機制。items參數指向的數組中的每一個元素都是一個zmq_pollitem_t結構體。nitems參數指定了items數組裡面的元素個數。zmq_pollitem_t結構的敵營如下所示:

<a></a>

對每一個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

See also

zmq_socket(3) zmq_send(3) zmq_recv(3) zmq(7)

你作業系統中對poll()系統調用的文檔。

Authors

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

本文轉自郝峰波部落格園部落格,原文連結:http://www.cnblogs.com/fengbohello/p/4257438.html,如需轉載請自行聯系原作者