Commit 6badd204 authored by Martin Hurton's avatar Martin Hurton

Implement flow control for ZMQ_REP sockets

parent 923609b0
...@@ -146,7 +146,6 @@ void zmq::rep_t::xrevive (class reader_t *pipe_) ...@@ -146,7 +146,6 @@ void zmq::rep_t::xrevive (class reader_t *pipe_)
void zmq::rep_t::xrevive (class writer_t *pipe_) void zmq::rep_t::xrevive (class writer_t *pipe_)
{ {
zmq_not_implemented ();
} }
int zmq::rep_t::xsetsockopt (int option_, const void *optval_, int zmq::rep_t::xsetsockopt (int option_, const void *optval_,
...@@ -163,16 +162,17 @@ int zmq::rep_t::xsend (zmq_msg_t *msg_, int flags_) ...@@ -163,16 +162,17 @@ int zmq::rep_t::xsend (zmq_msg_t *msg_, int flags_)
return -1; return -1;
} }
// TODO: Implement this once queue limits are in-place. If the reply
// overloads the buffer, connection should be torn down.
zmq_assert (reply_pipe->check_write ());
// Push message to the selected pipe. If requester have disconnected // Push message to the selected pipe. If requester have disconnected
// in the meantime, drop the reply. // in the meantime, drop the reply.
if (reply_pipe) { if (reply_pipe) {
bool written = reply_pipe->write (msg_); bool written = reply_pipe->write (msg_);
zmq_assert (written); if (written)
reply_pipe->flush (); reply_pipe->flush ();
else
// The pipe is full; just drop the reference to
// the message content.
// TODO: Tear down the underlying connection.
zmq_msg_close (msg_);
} }
else { else {
zmq_msg_close (msg_); zmq_msg_close (msg_);
......
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