Hi Martin:

This is just a guess, but it’s an educated guess.  The doc for 
zmq_socket_monitor says:

>  Each call to this method creates a ZMQ_PAIR socket and binds that to the 
> specified inproc:// endpoint. 


The newly-created socket doesn’t have any connections until you connect to it.  
(You probably also want to delete the old socket and create a new one to 
connect to the monitor endpoint).

I haven’t tested this, but based on what I’ve seen from zmq_socket_monitor this 
seems worth a try.

Regards,

Bill 

P.S. The blocking behavior on the second connect makes sense also: be careful 
when using socket monitoring — if you don’t consume monitor events, subsequent 
operations on the sockets you are monitoring will block.

> On Oct 31, 2018, at 3:26 PM, <martin.belan...@dell.com> 
> <martin.belan...@dell.com> wrote:
> 
> I want to be able to turn on/off monitoring using zmq_socket_monitor().
> 
> I turn on monitoring as follows:
>  zmq_socket_monitor(sock_to_monitor_p, "inproc://monitor-my-sock", 
> ZMQ_EVENT_ALL)
> 
> And I turn it off this way:
>  zmq_socket_monitor(sock_to_monitor_p, NULL, 0)
> 
> I designed my main process to be configurable. I send messages to it to tell 
> it to turn monitoring on/off in real time.
> 
> The first time I turn on monitoring, everything works as expected, i.e. the 
> monitor thread starts receiving events.
> When I turn off monitoring, again everything works fine, events are no longer 
> received.
> When I try to turn on monitoring again, nothing happens. The monitor thread 
> doesn't receive events.
> When I try to turn on monitoring yet again, the API zmq_socket_monitor() just 
> blocks (doesn't return).
> 
> Any idea why this is happening?
> 
> I looked at function zmq::socket_base_t::monitor() and I can't see anything 
> wrong with it. I see that this function will close the monitor socket when 
> endpoint_=NULL. And it will create a new monitor socket when endpoint_ is not 
> NULL. That function was clearly designed to allow switching monitoring on/off 
> as often as we like. So not sure what is going on here.
> 
> By the way, it would be nice if there was a separate API to allow changing 
> the event mask without having to close and open the monitor socket. This way 
> I could change the events back and forth between 0 and ZMQ_EVENT_ALL. That 
> would achieve what I'm trying to do with minimal impact (i.e. no socket 
> closing and re-opening).
> 
> Regards,
> Martin
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev@lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to