diff options
author | Martin Lucina <martin@lucina.net> | 2012-02-16 10:05:18 +0900 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2012-02-16 10:05:18 +0900 |
commit | 858b8ad76757624464c139be2367f0dce53f8c3b (patch) | |
tree | bf174496a722d151d33e861f9bdd43a199007b1d /src/socket_base.hpp | |
parent | cfba1f07987434263843f4aaee11ec088ec6ced3 (diff) |
Fix data loss for PUB/SUB and unidirectional transports (LIBZMQ-268)
With the introduction of subscription forwarding, the first message
sent on a PUB socket using a unidirectional transport (e.g. PGM) is
always lost due to the "subscribe to all" being done asynchronously.
This patch fixes the problem and also refactors the code to have a
single point where the "subscribe to all" is performed.
Signed-off-by: Martin Lucina <martin@lucina.net>
Diffstat (limited to 'src/socket_base.hpp')
-rw-r--r-- | src/socket_base.hpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/socket_base.hpp b/src/socket_base.hpp index 01a1564..1e35ffa 100644 --- a/src/socket_base.hpp +++ b/src/socket_base.hpp @@ -102,7 +102,8 @@ namespace xs // Concrete algorithms for the x- methods are to be defined by // individual socket types. - virtual void xattach_pipe (xs::pipe_t *pipe_) = 0; + virtual void xattach_pipe (xs::pipe_t *pipe_, + bool icanhasall_ = false) = 0; // The default implementation assumes there are no specific socket // options for the particular socket type. If not so, overload this @@ -157,7 +158,7 @@ namespace xs int check_protocol (const std::string &protocol_); // Register the pipe with this socket. - void attach_pipe (xs::pipe_t *pipe_); + void attach_pipe (xs::pipe_t *pipe_, bool icanhasall_ = false); // Processes commands sent to this socket (if any). If timeout is -1, // returns only after at least one command was processed. |