diff --git a/include/zmq.h b/include/zmq.h index d1b13709..3ecef1d2 100644 --- a/include/zmq.h +++ b/include/zmq.h @@ -278,6 +278,7 @@ ZMQ_EXPORT int zmq_msg_set (zmq_msg_t *msg, int option, int optval); #define ZMQ_PROBE_ROUTER 51 #define ZMQ_REQ_REQUEST_IDS 52 #define ZMQ_REQ_STRICT 53 +#define ZMQ_CONFLATE 54 /* Message options */ #define ZMQ_MORE 1 diff --git a/src/options.cpp b/src/options.cpp index f1767437..010222c8 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -54,7 +54,8 @@ zmq::options_t::options_t () : tcp_keepalive_intvl (-1), mechanism (ZMQ_NULL), as_server (0), - socket_id (0) + socket_id (0), + conflate (false) { } @@ -340,6 +341,16 @@ int zmq::options_t::setsockopt (int option_, const void *optval_, } break; # endif + + case ZMQ_CONFLATE: + if (is_int && (value == 0 || value == 1)) { + conflate = (value != 0); + return 0; + } + break; + + default: + break; } errno = EINVAL; return -1; @@ -596,6 +607,14 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_) } break; # endif + + case ZMQ_CONFLATE: + if (is_int) { + *value = conflate; + return 0; + } + break; + } errno = EINVAL; return -1; diff --git a/src/options.hpp b/src/options.hpp index cf5fbbd7..358b2858 100644 --- a/src/options.hpp +++ b/src/options.hpp @@ -142,6 +142,12 @@ namespace zmq // ID of the socket. int socket_id; + + // If true, socket conflates outgoing/incoming messages. + // Applicable to dealer, push/pull, pub/sub socket types. + // Cannot receive multi-part messages. + // Ignores hwm + bool conflate; }; }