zpoller(3)
CZMQ Manual - CZMQ/2.2.1
Name
zpoller - trivial socket poller class
Synopsis
// Create new poller
CZMQ_EXPORT zpoller_t *
zpoller_new (void *reader, ...);
// Destroy a poller
CZMQ_EXPORT void
zpoller_destroy (zpoller_t **self_p);
// Add a reader to be polled
CZMQ_EXPORT int
zpoller_add (zpoller_t *self, void *reader);
// Poll the registered readers for I/O, return first socket that has input.
// This means the order that sockets are defined in the poll list affects
// their priority. If you need a balanced poll, use the low level zmq_poll
// method directly. If the poll call was interrupted (SIGINT), or the ZMQ
// context was destroyed, or the timeout expired, returns NULL. You can
// test the actual exit condition by calling zpoller_expired () and
// zpoller_terminated (). Timeout is in msec.
CZMQ_EXPORT void *
zpoller_wait (zpoller_t *self, int timeout);
// Return true if the last zpoller_wait () call ended because the timeout
// expired, without any error.
CZMQ_EXPORT bool
zpoller_expired (zpoller_t *self);
// Return true if the last zpoller_wait () call ended because the process
// was interrupted, or the parent context was destroyed.
CZMQ_EXPORT bool
zpoller_terminated (zpoller_t *self);
// Self test of this class
CZMQ_EXPORT int
zpoller_test (bool verbose);
Description
The zpoller class provides a minimalist interface to ZeroMQ's zmq_poll API, for the very common case of reading from a number of sockets. It does not provide polling for output, nor polling on file handles. If you need either of these, use the zmq_poll API directly.
Example
From zpoller_test method
zctx_t *ctx = zctx_new ();
// Create a few sockets
void *vent = zsocket_new (ctx, ZMQ_PUSH);
int rc = zsocket_bind (vent, "tcp://*:9000");
assert (rc != -1);
void *sink = zsocket_new (ctx, ZMQ_PULL);
rc = zsocket_connect (sink, "tcp://localhost:9000");
assert (rc != -1);
void *bowl = zsocket_new (ctx, ZMQ_PULL);
void *dish = zsocket_new (ctx, ZMQ_PULL);
// Set-up poller
zpoller_t *poller = zpoller_new (bowl, dish, NULL);
assert (poller);
// Add a reader the existing poller
rc = zpoller_add (poller, sink);
assert (rc != -1);
zstr_send (vent, "Hello, World");
// We expect a message only on the sink
void *which = zpoller_wait (poller, -1);
assert (which == sink);
assert (zpoller_expired (poller) == false);
assert (zpoller_terminated (poller) == false);
char *message = zstr_recv (which);
assert (streq (message, "Hello, World"));
zstr_free (&message);
// Destroy poller and context
zpoller_destroy (&poller); zctx_destroy (&ctx);
See also
Authors
The CZMQ manual was written by Pieter Hintjens<moc.xitami|hp#moc.xitami|hp>.
Resources
Main web site: http://czmq.zeromq.org/
Report bugs to the ØMQ development mailing list: <gro.qmorez.stsil|ved-qmorez#gro.qmorez.stsil|ved-qmorez>
Copyright
Copyright (c) 1991-2014 iMatix and Contributors. License LGPLv3+: GNU LGPL 3 or later <http://gnu.org/licenses/lgpl.html>. This is free software: you are free to change it and redistribute it. There is NO WARRANTY, to the extent permitted by law. For details see the files COPYING and COPYING.LESSER included with the CZMQ distribution.