[zeromq-dev] dev_poll

Serge Aleynikov serge at aleynikov.org
Tue May 11 16:09:45 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 and can provide the implementation if 
there's interest of including it in the library.

Serge



More information about the zeromq-dev mailing list