Implement flow control for ZMQ_REP sockets

This commit is contained in:
Martin Hurton 2010-03-03 17:25:46 +01:00
parent 923609b092
commit 6badd204d5

View File

@ -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_)
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_);