diff options
| -rw-r--r-- | src/dist.cpp | 10 | ||||
| -rw-r--r-- | src/msg.cpp | 6 | ||||
| -rw-r--r-- | src/msg.hpp | 1 | 
3 files changed, 17 insertions, 0 deletions
diff --git a/src/dist.cpp b/src/dist.cpp index 795e13e..b4fae6f 100644 --- a/src/dist.cpp +++ b/src/dist.cpp @@ -137,6 +137,16 @@ void zmq::dist_t::distribute (msg_t *msg_, int flags_)          return;      } +    if (msg_->is_vsm ()) { +        for (pipes_t::size_type i = 0; i < matching; ++i) +            write (pipes [i], msg_); +        int rc = msg_->close(); +        errno_assert (rc == 0); +        rc = msg_->init (); +        errno_assert (rc == 0); +        return; +    } +      //  Add matching-1 references to the message. We already hold one reference,      //  that's why -1.      msg_->add_refs ((int) matching - 1); diff --git a/src/msg.cpp b/src/msg.cpp index e51ab67..fba7ec9 100644 --- a/src/msg.cpp +++ b/src/msg.cpp @@ -237,6 +237,11 @@ bool zmq::msg_t::is_delimiter ()      return u.base.type == type_delimiter;  } +bool zmq::msg_t::is_vsm () +{ +    return u.base.type == type_vsm; +} +  void zmq::msg_t::add_refs (int refs_)  {      zmq_assert (refs_ >= 0); @@ -279,3 +284,4 @@ bool zmq::msg_t::rm_refs (int refs_)      return true;  } + diff --git a/src/msg.hpp b/src/msg.hpp index 514f95b..6b4e216 100644 --- a/src/msg.hpp +++ b/src/msg.hpp @@ -68,6 +68,7 @@ namespace zmq          void set_flags (unsigned char flags_);          void reset_flags (unsigned char flags_);          bool is_delimiter (); +        bool is_vsm ();          //  After calling this function you can copy the message in POD-style          //  refs_ times. No need to call copy.  | 
