[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