Commit 5cd9f74a authored by Martin Sustrik's avatar Martin Sustrik

few fixed related to multi-part messages in REP socket

parent 77cbd18e
......@@ -93,8 +93,6 @@ void zmq::rep_t::xdetach_inpipe (class reader_t *pipe_)
void zmq::rep_t::xdetach_outpipe (class writer_t *pipe_)
{
zmq_assert (!sending_reply || !more || reply_pipe != pipe_);
zmq_assert (pipe_);
zmq_assert (in_pipes.size () == out_pipes.size ());
......@@ -182,18 +180,19 @@ int zmq::rep_t::xsend (zmq_msg_t *msg_, int flags_)
errno = EAGAIN;
return -1;
}
more = msg_->flags & ZMQ_MSG_MORE;
}
else {
// If the requester have disconnected in the meantime, drop the reply.
more = msg_->flags & ZMQ_MSG_MORE;
zmq_msg_close (msg_);
}
// Check whether it's last part of the reply.
more = msg_->flags & ZMQ_MSG_MORE;
// Flush the reply to the requester.
if (!more) {
if (reply_pipe)
reply_pipe->flush ();
sending_reply = false;
reply_pipe = NULL;
......@@ -243,7 +242,10 @@ int zmq::rep_t::xrecv (zmq_msg_t *msg_, int flags_)
bool zmq::rep_t::xhas_in ()
{
if (!sending_reply && more)
if (sending_reply)
return false;
if (more)
return true;
for (int count = active; count != 0; count--) {
......@@ -259,7 +261,10 @@ bool zmq::rep_t::xhas_in ()
bool zmq::rep_t::xhas_out ()
{
if (sending_reply && more)
if (!sending_reply)
return false;
if (more)
return true;
// TODO: No check for write here...
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment