123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- zmq_poll(3)
- ===========
- NAME
- ----
- zmq_poll - input/output multiplexing
- SYNOPSIS
- --------
- *int zmq_poll (zmq_pollitem_t '*items', int 'nitems', long 'timeout');*
- DESCRIPTION
- -----------
- The _zmq_poll()_ function provides a mechanism for applications to multiplex
- input/output events in a level-triggered fashion over a set of sockets. Each
- member of the array pointed to by the 'items' argument is a *zmq_pollitem_t*
- structure. The 'nitems' argument specifies the number of items in the 'items'
- array. The *zmq_pollitem_t* structure is defined as follows:
- ["literal", subs="quotes"]
- typedef struct
- {
- void '*socket';
- int 'fd';
- short 'events';
- short 'revents';
- } zmq_pollitem_t;
- For each *zmq_pollitem_t* item, _zmq_poll()_ shall examine either the 0MQ
- socket referenced by 'socket' *or* the standard socket specified by the file
- descriptor 'fd', for the event(s) specified in 'events'. If both 'socket' and
- 'fd' are set in a single *zmq_pollitem_t*, the 0MQ socket referenced by
- 'socket' shall take precedence and the value of 'fd' shall be ignored.
- For each *zmq_pollitem_t* item, _zmq_poll()_ shall first clear the 'revents'
- member, and then indicate any requested events that have occurred by setting the
- bit corresponding to the event condition in the 'revents' member.
- If none of the requested events have occurred on any *zmq_pollitem_t* item,
- _zmq_poll()_ shall wait 'timeout' milliseconds for an event to occur on
- any of the requested items. If the value of 'timeout' is `0`, _zmq_poll()_
- shall return immediately. If the value of 'timeout' is `-1`, _zmq_poll()_ shall
- block indefinitely until a requested event has occurred on at least one
- *zmq_pollitem_t*.
- The 'events' and 'revents' members of *zmq_pollitem_t* are bit masks constructed
- by OR'ing a combination of the following event flags:
- *ZMQ_POLLIN*::
- For 0MQ sockets, at least one message may be received from the 'socket' without
- blocking. For standard sockets this is equivalent to the 'POLLIN' flag of the
- _poll()_ system call and generally means that at least one byte of data may be
- read from 'fd' without blocking.
- *ZMQ_POLLOUT*::
- For 0MQ sockets, at least one message may be sent to the 'socket' without
- blocking. For standard sockets this is equivalent to the 'POLLOUT' flag of the
- _poll()_ system call and generally means that at least one byte of data may be
- written to 'fd' without blocking.
- *ZMQ_POLLERR*::
- For standard sockets, this flag is passed through _zmq_poll()_ to the
- underlying _poll()_ system call and generally means that some sort of error
- condition is present on the socket specified by 'fd'. For 0MQ sockets this flag
- has no effect if set in 'events', and shall never be returned in 'revents' by
- _zmq_poll()_.
- *ZMQ_POLLPRI*::
- For 0MQ sockets this flags is of no use. For standard sockets this means there
- is urgent data to read. Refer to the POLLPRI flag for more informations.
- For file descriptor, refer to your use case: as an example, GPIO interrupts
- are signaled through a POLLPRI event.
- This flag has no effect on Windows.
- NOTE: The _zmq_poll()_ function may be implemented or emulated using operating
- system interfaces other than _poll()_, and as such may be subject to the limits
- of those interfaces in ways not defined in this documentation.
- THREAD SAFETY
- -------------
- The *zmq_pollitem_t* array must only be used by the thread which
- will/is calling _zmq_poll_.
- If a socket is contained in multiple *zmq_pollitem_t* arrays, each owned by a
- different thread, the socket itself needs to be thead-safe (Server, Client, ...).
- Otherwise, behaviour is undefined.
- RETURN VALUE
- ------------
- Upon successful completion, the _zmq_poll()_ function shall return the number
- of *zmq_pollitem_t* structures with events signaled in 'revents' or `0` if no
- events have been signaled. Upon failure, _zmq_poll()_ shall return `-1` and set
- 'errno' to one of the values defined below.
- ERRORS
- ------
- *ETERM*::
- At least one of the members of the 'items' array refers to a 'socket' whose
- associated 0MQ 'context' was terminated.
- *EFAULT*::
- The provided 'items' was not valid (NULL).
- *EINTR*::
- The operation was interrupted by delivery of a signal before any events were
- available.
- EXAMPLE
- -------
- .Polling indefinitely for input events on both a 0MQ socket and a standard socket.
- ----
- zmq_pollitem_t items [2];
- /* First item refers to 0MQ 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
- --------
- linkzmq:zmq_socket[3]
- linkzmq:zmq_send[3]
- linkzmq:zmq_recv[3]
- linkzmq:zmq[7]
- Your operating system documentation for the _poll()_ system call.
- AUTHORS
- -------
- This page was written by the 0MQ community. To make a change please
- read the 0MQ Contribution Policy at <http://www.zeromq.org/docs:contributing>.
|