[zeromq-dev] zmq_poll

Serge Aleynikov serge at aleynikov.org
Tue May 11 16:23:55 CEST 2010


Hi,

The current design of zmq_poll(3) call assumes the "ownership" of a the 
event objects such that it'll make the underlying poll call on the 
number of event objects (i.e. file descriptors or zmq sockets) and block 
for a specified timeout.

When integrating this library with other libraries (such as Erlang VM), 
they may have their own event loop and facility to add/remove file 
descriptors along with providing a callback indicating that there's 
activity on given file descriptors.

I'd like to see if the following requirement sounds reasonable.

Objective
---------
Allow external event loops control ZMQ communications layer.


Implementation
--------------
Add two new functions:

int zmq_poll_prepare(pollfd* fds_, zmq_pollitem_t *items_, int nitems_,
                      int* zmq_signaler_fd_);
     Initialize the fds_ array of size nitems_ with file
     descriptors from items_.  If there are ZMQ sockets in the items_
     array, *zmq_signaler_fd_ will contain the index of the ZMQ signaling
     fd.  Otherwise *zmq_signaler_fd_ will be set to -1.

int zmq_poll_check(pollfd* fd_, zmq_pollitem_t* item_, int event_,
                    short type_)
     This function needs to be called after externally detected activity
     on event_.  fd_ and item_ is the pollfd and zmq_pollitem_t structs
     corresponding to event_ item.
     The function will process internal ZMQ commands and update
     item_->revents corresponding to the type_ of event detected.

I'd like to hear your feedback about adding this feature and can provide 
the implementation if there's interest of including it in the library.

Serge



More information about the zeromq-dev mailing list