>From d7adc3f19a4c941e854552d6d7881950a69b0d23 Mon Sep 17 00:00:00 2001
From: Martin Sustrik <[email protected]>
Date: Mon, 11 Jul 2011 09:57:59 +0200
Subject: [PATCH] ZMQ_FILTER option removed

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 <[email protected]>
---
 doc/zmq_getsockopt.txt |   17 -----------------
 doc/zmq_setsockopt.txt |   16 ----------------
 include/zmq.h          |    1 -
 src/options.cpp        |   22 ++--------------------
 src/options.hpp        |    6 +++---
 src/sub.cpp            |    4 ++++
 6 files changed, 9 insertions(+), 57 deletions(-)

diff --git a/doc/zmq_getsockopt.txt b/doc/zmq_getsockopt.txt
index 09256c2..51b6c9e 100644
--- a/doc/zmq_getsockopt.txt
+++ b/doc/zmq_getsockopt.txt
@@ -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
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/doc/zmq_setsockopt.txt b/doc/zmq_setsockopt.txt
index 0093085..8bc9e8f 100644
--- a/doc/zmq_setsockopt.txt
+++ b/doc/zmq_setsockopt.txt
@@ -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
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/include/zmq.h b/include/zmq.h
index 7de421b..a97a2ff 100644
--- a/include/zmq.h
+++ b/include/zmq.h
@@ -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
diff --git a/src/options.cpp b/src/options.cpp
index aa92f93..be7c4b5 100644
--- a/src/options.cpp
+++ b/src/options.cpp
@@ -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)
 {
 }
 
@@ -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;
@@ -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;
diff --git a/src/options.hpp b/src/options.hpp
index 70144b2..a4a0bc6 100644
--- a/src/options.hpp
+++ b/src/options.hpp
@@ -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;
@@ -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;
     };
 
 }
diff --git a/src/sub.cpp b/src/sub.cpp
index c8ffd2e..2a1454a 100644
--- a/src/sub.cpp
+++ b/src/sub.cpp
@@ -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 ()
-- 
1.7.0.4

_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to