ZMQ_FILTER socket option added

This option is a performance tweak. In devices XSUB socket filters
the messages just to send them to XPUB socket which filters them
once more. Setting ZMQ_FILTER option to 0 allows to switch the
filtering in XSUB socket off.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
Martin Sustrik
2011-06-12 15:24:08 +02:00
parent e080e3e8b6
commit ff93f54653
6 changed files with 62 additions and 3 deletions

View File

@@ -38,6 +38,7 @@ zmq::options_t::options_t () :
reconnect_ivl_max (0),
backlog (100),
maxmsgsize (-1),
filter (1),
immediate_connect (true)
{
}
@@ -172,6 +173,15 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
multicast_hops = *((int*) optval_);
return 0;
case ZMQ_FILTER:
if (optvallen_ != sizeof (int) || (*((int*) optval_) != 0 &&
*((int*) optval_) != 1)) {
errno = EINVAL;
return -1;
}
filter = *((int*) optval_);
return 0;
}
errno = EINVAL;
@@ -317,6 +327,15 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_)
*optvallen_ = sizeof (int);
return 0;
case ZMQ_FILTER:
if (*optvallen_ < sizeof (int)) {
errno = EINVAL;
return -1;
}
*((int*) optval_) = filter;
*optvallen_ = sizeof (int);
return 0;
}
errno = EINVAL;