[zeromq-dev] How to make a client die if a server crashes.
Jim Garlick
garlick at llnl.gov
Thu Feb 12 02:21:36 CET 2015
You can use zmonitor(3) with zmq_poll(3), e.g. to catch a disconnect
on a zmq socket called 'zsock':
zmonitor_t *zmon;
zmq_pollitem_t zp;
if (!(zmon = zmonitor_new (zctx, zsock, ZMQ_EVENT_DISCONNECTED)))
err_exit ("zmonitor_new");
if (vopt)
zmonitor_set_verbose (zmon, true);
zp.socket = zmonitor_socket (zmon);
zp.events = ZMQ_POLLIN;
Then zmq_poll on zp and whatever else. When zsock is ready for reading,
do something like this:
zmsg *zmsg;
int event = 0;
if ((zmsg = zmsg_recv (zp.socket))) {
char *s = zmsg_popstr (zmsg);
if (s) {
event = strtoul (s, NULL, 10);
free (s);
}
if (event == ZMQ_EVENT_DISCONNECTED)
msg_exit ("lost connection");
zmsg_destroy (&zmsg);
}
Jim
On Wed, Feb 11, 2015 at 05:07:05PM -0800, Jonathan Bishop wrote:
> Hi,
>
> I am integrating 0MQ into an existing system. Previously I was using unix
> sockets and I would detect POLLHUP | POLLERR | POLLNVAL on a client when
> the server died. I would do this using poll()...
>
> struct pollfd pfd;
> pfd.fd = fd;
> pfd.events = 0;
> pfd.revents = 0;
> rc = poll(&pfd, 1, 0);
> assert(rc >= 0 || errno == EINTR);
> if (pfd.revents & (POLLHUP | POLLERR | POLLNVAL))
> <shutdown somehow>
>
>
> Tried the equivalent code in 0MQ and ZMQ_POLLERR but no luck. Can someone
> help me?
>
> Thanks,
>
> Jon
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
More information about the zeromq-dev
mailing list