Merge branch 'master' of git@github.com:sustrik/zeromq2

This commit is contained in:
Martin Sustrik
2010-02-19 15:25:05 +01:00
28 changed files with 219 additions and 131 deletions

View File

@@ -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 ()