summaryrefslogtreecommitdiff
path: root/src/socket_base.hpp
diff options
context:
space:
mode:
authorMartin Lucina <martin@lucina.net>2012-02-16 10:05:18 +0900
committerMartin Sustrik <sustrik@250bpm.com>2012-02-16 10:05:18 +0900
commit858b8ad76757624464c139be2367f0dce53f8c3b (patch)
treebf174496a722d151d33e861f9bdd43a199007b1d /src/socket_base.hpp
parentcfba1f07987434263843f4aaee11ec088ec6ced3 (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.hpp5
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.