/* send 100 messages over PAIR sockets * sender in one event handler, receiver in another */ void test_ev_zmq (void) { struct ev_loop *loop; void *zctx; void *zin, *zout; int i; ev_zmq win, wout; ok ((loop = ev_loop_new (EVFLAG_AUTO)) != NULL, "ev_loop_new works"); ok ((zctx = zmq_init (1)) != NULL, "initialized zmq context"); ok ((zout = zmq_socket (zctx, ZMQ_PAIR)) != NULL && zmq_bind (zout, "inproc://eventloop_test") == 0, "PAIR socket bind ok"); ok ((zin = zmq_socket (zctx, ZMQ_PAIR)) != NULL && zmq_connect (zin, "inproc://eventloop_test") == 0, "PAIR socket connect ok"); i = 0; ev_zmq_init (&win, zsock_rx_cb, zin, EV_READ); win.data = &i; ev_zmq_init (&wout, zsock_tx_cb, zout, EV_WRITE); ev_zmq_start (loop, &win); ev_zmq_start (loop, &wout); ok (ev_run (loop, 0) == 0, "both watchers removed themselves and ev_run exited"); ev_zmq_stop (loop, &win); ev_zmq_stop (loop, &wout); cmp_ok (i, "==", 100, "ev_zmq handler ran 100 times"); ev_loop_destroy (loop); zmq_close (zin); zmq_close (zout); zmq_ctx_destroy (zctx); }
static void zmq_start (void *impl, flux_watcher_t *w) { assert (w->signature == ZMQ_SIG); ev_zmq_start (w->r->loop, (ev_zmq *)impl); }