Skip to content

Commit

Permalink
ZMQ_FILTER option removed
Browse files Browse the repository at this point in the history
The filtering is now done depending on the socket type. SUB socket
filters the messages (end-to-end filtering) while XSUB relies
on upstream nodes to do (imprefect) filtering.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
  • Loading branch information
sustrik committed Jul 11, 2011
1 parent a154ef6 commit d7adc3f
Show file tree
Hide file tree
Showing 6 changed files with 9 additions and 57 deletions.
17 changes: 0 additions & 17 deletions doc/zmq_getsockopt.txt
Expand Up @@ -320,23 +320,6 @@ Default value:: 1
Applicable socket types:: all, when using multicast transports


ZMQ_FILTER: Switches message filtering on or off
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The option shall retrieve the filtering behaiour of the socket.
If 1, messages are filtered according to subcriptions as expected.
If 0, messages are not filtered. This is a performance tweak. If a device
receives a message from XSUB socket and it is about to send it to XPUB socket
immediately, filtering would be done twice. We can thus turn off filtering in
XSUB socket and rely on filtering in XPUB socket.

[horizontal]
Option value type:: int
Option value unit:: boolean
Default value:: 1
Applicable socket types:: ZMQ_SUB, ZMQ_XSUB


ZMQ_RCVTIMEO: Maximum time before a socket operation returns with EAGAIN
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
16 changes: 0 additions & 16 deletions doc/zmq_setsockopt.txt
Expand Up @@ -312,22 +312,6 @@ Default value:: 1
Applicable socket types:: all, when using multicast transports


ZMQ_FILTER: Switches message filtering on or off
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If set to 1, messages are filtered according to subcriptions as expected.
If set to 0, messages are not filtered. This is a performance tweak. If a device
receives a message from XSUB socket and it is about to send it to XPUB socket
immediately, filtering would be done twice. We can thus turn off filtering in
XSUB socket and rely on filtering in XPUB socket.

[horizontal]
Option value type:: int
Option value unit:: boolean
Default value:: 1
Applicable socket types:: ZMQ_SUB, ZMQ_XSUB


ZMQ_RCVTIMEO: Maximum time before a recv operation returns with EAGAIN
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
1 change: 0 additions & 1 deletion include/zmq.h
Expand Up @@ -182,7 +182,6 @@ ZMQ_EXPORT int zmq_term (void *context);
#define ZMQ_SNDHWM 23
#define ZMQ_RCVHWM 24
#define ZMQ_MULTICAST_HOPS 25
#define ZMQ_FILTER 26
#define ZMQ_RCVTIMEO 27
#define ZMQ_SNDTIMEO 28
#define ZMQ_RCVLABEL 29
Expand Down
22 changes: 2 additions & 20 deletions src/options.cpp
Expand Up @@ -38,12 +38,12 @@ zmq::options_t::options_t () :
reconnect_ivl_max (0),
backlog (100),
maxmsgsize (-1),
filter (1),
rcvtimeo (-1),
sndtimeo (-1),
immediate_connect (true),
delay_on_close (true),
delay_on_disconnect (true)
delay_on_disconnect (true),
filter (false)
{
}

Expand Down Expand Up @@ -177,15 +177,6 @@ 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;

case ZMQ_RCVTIMEO:
if (optvallen_ != sizeof (int)) {
errno = EINVAL;
Expand Down Expand Up @@ -347,15 +338,6 @@ 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;

case ZMQ_RCVTIMEO:
if (*optvallen_ < sizeof (int)) {
errno = EINVAL;
Expand Down
6 changes: 3 additions & 3 deletions src/options.hpp
Expand Up @@ -75,9 +75,6 @@ namespace zmq
// Maximal size of message to handle.
int64_t maxmsgsize;

// If 1, (X)SUB socket should filter the messages. If 0, it should not.
int filter;

// The timeout for send/recv operations for this socket.
int rcvtimeo;
int sndtimeo;
Expand All @@ -95,6 +92,9 @@ namespace zmq
// If true, socket reads all the messages from the pipe and delivers
// them to the user when the peer terminates.
bool delay_on_disconnect;

// If 1, (X)SUB socket should filter the messages. If 0, it should not.
bool filter;
};

}
Expand Down
4 changes: 4 additions & 0 deletions src/sub.cpp
Expand Up @@ -25,6 +25,10 @@ zmq::sub_t::sub_t (class ctx_t *parent_, uint32_t tid_) :
xsub_t (parent_, tid_)
{
options.type = ZMQ_SUB;

// Switch filtering messages on (as opposed to XSUB which where the
// filtering is off).
options.filter = true;
}

zmq::sub_t::~sub_t ()
Expand Down

0 comments on commit d7adc3f

Please sign in to comment.