Hi All,
Say I'm monitoring a socket using zmq_socket_monitor and have a monitor thread
blocked on a zmq_recvmsg waiting for socket activity, is there a way to
abort the monitoring and unblock the socket other than closing the entire
context?
I've tried calling zmq_socket_monitor again with a NULL address, that stops any
more events going to the monitor socket but does not unblock it.
Maybe if we call zmq_socket_monitor on an already monitored socket it could
send and event to the already connected monitor socket to indicate the
change?
Full example here:
#include <zmq.h>
#include <assert.h>
#include <cstring>
#include <pthread.h>
#include <unistd.h>
static void *req_socket_monitor (void *ctx)
{
void *s = zmq_socket (ctx, ZMQ_PAIR);
assert (s);
int rc = zmq_connect (s, "inproc://monitor.req");
assert (rc == 0);
zmq_msg_t msg;
zmq_msg_init (&msg);
printf("Waiting for socket monitor activitiy\n");
rc = zmq_recvmsg (s, &msg, 0);
if (rc == -1 && zmq_errno() == ETERM)
{
printf("Monitor aborting\n");
}
else
{
assert (rc != -1);
printf("Got activity\n");
}
zmq_close (s);
return NULL;
}
int main(int argc, char* argv[])
{
void* ctx = zmq_ctx_new();
void* req = zmq_socket(ctx, ZMQ_REQ);
int rc = zmq_socket_monitor (req, "inproc://monitor.req", ZMQ_EVENT_ALL);
assert (rc == 0);
printf("Spawning monitor thread\n");
pthread_t thread;
rc = pthread_create (&thread, NULL, req_socket_monitor, ctx);
assert (rc == 0);
sleep(1);
printf("Aborting monitor thread\n");
// What to do here to unblock monitor thread?
rc = zmq_socket_monitor (req, NULL, ZMQ_EVENT_ALL);
pthread_join(thread, NULL);
printf("Monitor thread aborted\n");
zmq_close(req);
zmq_ctx_destroy(ctx);
return 0;
}
Thanks,
Ric.
===========================================================
The information in this email is confidential, and is intended solely for the
addressee(s).
Access to this email by anyone else is unauthorized and therefore prohibited.
If you are
not the intended recipient you are notified that disclosing, copying,
distributing or taking
any action in reliance on the contents of this information is strictly
prohibited and may be unlawful.
===========================================================_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev