zpoller(3)

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

czmq(7)

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.