Looking at socket_base_t::recv() trying to figure out what is causing my
recv() hangs.  Can someone confirm my understanding of the following
scenario:

1. socket_base.cpp::387 - call to xrecv() returns no message so rc == -1
2. message comes in and io_thread pushes it on queue and calls send_revive()
3. continuing execution of the socket_base_t::recv() call, ticks ==
inbound_poll_rate so process_commands() is called -- pulling the revive
message off the pipe
4. next we get into the loop that begins at socket_base.cpp:440 and never
exit because of the blocking call to process_commands() that never returns
due to the revive() message being pulled from the pipe back at line 399.

This would result in a recv() call never returning.  It would only occur if
a message was received AFTER the xrecv() call on line  387 and flushed to an
empty pipe with the revive command BEFORE the process_commands() call on
line 399.

Thoughts?

I'll probably put some debug code together to see if I can confirm this.

Using version 2.0.9 of zeromq on x86_64 Linux

Marc
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to