diff --git a/src/req.cpp b/src/req.cpp index c68ec8e9..035ca29f 100644 --- a/src/req.cpp +++ b/src/req.cpp @@ -193,7 +193,7 @@ bool zmq::req_t::xhas_out () return dealer_t::xhas_out (); } -int zmq::req_t::xsetsockopt(int option_, const void *optval_, size_t optvallen_) +int zmq::req_t::xsetsockopt (int option_, const void *optval_, size_t optvallen_) { bool is_int = (optvallen_ == sizeof (int)); int value = is_int? *((int *) optval_): 0; @@ -216,17 +216,24 @@ int zmq::req_t::xsetsockopt(int option_, const void *optval_, size_t optvallen_) break; } - return dealer_t::xsetsockopt(option_, optval_, optvallen_); + return dealer_t::xsetsockopt (option_, optval_, optvallen_); +} + +void zmq::req_t::xpipe_terminated (pipe_t *pipe_) +{ + if (reply_pipe == pipe_) + reply_pipe = NULL; + dealer_t::xpipe_terminated (pipe_); } int zmq::req_t::recv_reply_pipe (msg_t *msg_) { while (true) { pipe_t *pipe = NULL; - int rc = dealer_t::recvpipe(msg_, &pipe); + int rc = dealer_t::recvpipe (msg_, &pipe); if (rc != 0) return rc; - if (pipe == reply_pipe) + if (!reply_pipe || pipe == reply_pipe) return 0; } } diff --git a/src/req.hpp b/src/req.hpp index 1a7abf3a..73d395c5 100644 --- a/src/req.hpp +++ b/src/req.hpp @@ -44,6 +44,7 @@ namespace zmq bool xhas_in (); bool xhas_out (); int xsetsockopt (int option_, const void *optval_, size_t optvallen_); + void xpipe_terminated (zmq::pipe_t *pipe_); protected: