mirror of
https://github.com/zeromq/libzmq.git
synced 2025-11-07 05:58:45 +01:00
Merge branch 'master' of git@github.com:sustrik/zeromq2
This commit is contained in:
@@ -346,6 +346,7 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_)
|
||||
{
|
||||
// Get the message.
|
||||
int rc = xrecv (msg_, flags_);
|
||||
int err = errno;
|
||||
|
||||
// Once every inbound_poll_rate messages check for signals and process
|
||||
// incoming commands. This happens only if we are not polling altogether
|
||||
@@ -364,29 +365,30 @@ int zmq::socket_base_t::recv (::zmq_msg_t *msg_, int flags_)
|
||||
if (rc == 0)
|
||||
return 0;
|
||||
|
||||
// If we don't have the message, restore the original cause of the problem.
|
||||
errno = err;
|
||||
|
||||
// If the message cannot be fetched immediately, there are two scenarios.
|
||||
// For non-blocking recv, commands are processed in case there's a revive
|
||||
// command already waiting int a command pipe. If it's not, return EAGAIN.
|
||||
// In blocking scenario, commands are processed over and over again until
|
||||
// we are able to fetch a message.
|
||||
if (flags_ & ZMQ_NOBLOCK) {
|
||||
if (errno != EAGAIN)
|
||||
return -1;
|
||||
app_thread->process_commands (false, false);
|
||||
ticks = 0;
|
||||
return xrecv (msg_, flags_);
|
||||
}
|
||||
|
||||
// In blocking scenario, commands are processed over and over again until
|
||||
// we are able to fetch a message.
|
||||
while (rc != 0) {
|
||||
if (errno != EAGAIN)
|
||||
return -1;
|
||||
app_thread->process_commands (true, false);
|
||||
rc = xrecv (msg_, flags_);
|
||||
ticks = 0;
|
||||
}
|
||||
else {
|
||||
while (rc != 0) {
|
||||
if (errno != EAGAIN)
|
||||
return -1;
|
||||
app_thread->process_commands (true, false);
|
||||
rc = xrecv (msg_, flags_);
|
||||
ticks = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int zmq::socket_base_t::close ()
|
||||
|
||||
Reference in New Issue
Block a user