bool zmq::pipe_t::read (msg_t *msg_) { if (unlikely (!in_active)) return false; if (unlikely (state != active && state != waiting_for_delimiter)) return false; if (!inpipe->read (msg_)) { in_active = false; return false; } // If delimiter was read, start termination process of the pipe. if (msg_->is_delimiter ()) { process_delimiter (); return false; } if (!(msg_->flags () & msg_t::more)) msgs_read++; if (lwm > 0 && msgs_read % lwm == 0) send_activate_write (peer, msgs_read); return true; }
bool zmq::pipe_t::read (msg_t *msg_) { if (unlikely (!_in_active)) return false; if (unlikely (_state != active && _state != waiting_for_delimiter)) return false; for (bool payload_read = false; !payload_read;) { if (!_in_pipe->read (msg_)) { _in_active = false; return false; } // If this is a credential, ignore it and receive next message. if (unlikely (msg_->is_credential ())) { const int rc = msg_->close (); zmq_assert (rc == 0); } else payload_read = true; } // If delimiter was read, start termination process of the pipe. if (msg_->is_delimiter ()) { process_delimiter (); return false; } if (!(msg_->flags () & msg_t::more) && !msg_->is_routing_id ()) _msgs_read++; if (_lwm > 0 && _msgs_read % _lwm == 0) send_activate_write (_peer, _msgs_read); return true; }
bool zmq::pipe_t::read (msg_t *msg_) { if (unlikely (!in_active)) return false; if (unlikely (state != active && state != waiting_for_delimiter)) return false; read_message: if (!inpipe->read (msg_)) { in_active = false; return false; } // If this is a credential, save a copy and receive next message. if (unlikely (msg_->is_credential ())) { const unsigned char *data = static_cast <const unsigned char *> (msg_->data ()); credential = blob_t (data, msg_->size ()); const int rc = msg_->close (); zmq_assert (rc == 0); goto read_message; } // If delimiter was read, start termination process of the pipe. if (msg_->is_delimiter ()) { process_delimiter (); return false; } if (!(msg_->flags () & msg_t::more) && !msg_->is_identity ()) msgs_read++; if (lwm > 0 && msgs_read % lwm == 0) send_activate_write (peer, msgs_read); return true; }