Reduced code duplication between xread and xhas_in

This commit is contained in:
Simon Giesecke 2018-08-07 14:02:26 +02:00
parent 3cca90ea44
commit ad3d1e7762
2 changed files with 12 additions and 13 deletions

View File

@ -184,6 +184,11 @@ int zmq::dish_t::xrecv (msg_t *msg_)
return 0;
}
return xxrecv (msg_);
}
int zmq::dish_t::xxrecv (msg_t *msg_)
{
do {
// Get a message using fair queueing algorithm.
const int rc = _fq.recv (msg_);
@ -207,19 +212,11 @@ bool zmq::dish_t::xhas_in ()
if (_has_message)
return true;
do {
// Get a message using fair queueing algorithm.
const int rc = _fq.recv (&_message);
// If there's no message available, return immediately.
// The same when error occurs.
if (rc != 0) {
errno_assert (errno == EAGAIN);
return false;
}
// Filter out non matching messages
} while (0 == _subscriptions.count (std::string (_message.group ())));
const int rc = xxrecv (&_message);
if (rc != 0) {
errno_assert (errno == EAGAIN);
return false;
}
// Matching message found
_has_message = true;

View File

@ -68,6 +68,8 @@ class dish_t : public socket_base_t
int xleave (const char *group_);
private:
int xxrecv (zmq::msg_t *msg_);
// Send subscriptions to a pipe
void send_subscriptions (pipe_t *pipe_);