summaryrefslogtreecommitdiff
path: root/src/options.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@fastmq.commkdir>2009-09-21 14:39:59 +0200
committerMartin Sustrik <sustrik@fastmq.commkdir>2009-09-21 14:39:59 +0200
commitcb1b6fe32cbf3c7cf5961bb4156f2de743693a3a (patch)
treefad2a866ccb543fd4676c4539c68fb32c52dc3a3 /src/options.cpp
parent7668b246fc3cf4a2a3b3ee9b1283ad8a4b12ac4f (diff)
initial version of req/rep sockets
Diffstat (limited to 'src/options.cpp')
-rw-r--r--src/options.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/options.cpp b/src/options.cpp
index 55417f5..b0e6e6e 100644
--- a/src/options.cpp
+++ b/src/options.cpp
@@ -17,7 +17,10 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "../bindings/c/zmq.h"
+
#include "options.hpp"
+#include "err.hpp"
zmq::options_t::options_t () :
hwm (0),
@@ -29,3 +32,80 @@ zmq::options_t::options_t () :
use_multicast_loop (false)
{
}
+
+int zmq::options_t::setsockopt (int option_, const void *optval_,
+ size_t optvallen_)
+{
+ switch (option_) {
+
+ case ZMQ_HWM:
+ if (optvallen_ != sizeof (int64_t)) {
+ errno = EINVAL;
+ return -1;
+ }
+ hwm = *((int64_t*) optval_);
+ return 0;
+
+ case ZMQ_LWM:
+ if (optvallen_ != sizeof (int64_t)) {
+ errno = EINVAL;
+ return -1;
+ }
+ lwm = *((int64_t*) optval_);
+ return 0;
+
+ case ZMQ_SWAP:
+ if (optvallen_ != sizeof (int64_t)) {
+ errno = EINVAL;
+ return -1;
+ }
+ swap = *((int64_t*) optval_);
+ return 0;
+
+ case ZMQ_AFFINITY:
+ if (optvallen_ != sizeof (int64_t)) {
+ errno = EINVAL;
+ return -1;
+ }
+ affinity = (uint64_t) *((int64_t*) optval_);
+ return 0;
+
+ case ZMQ_IDENTITY:
+ identity.assign ((const char*) optval_, optvallen_);
+ return 0;
+
+ case ZMQ_RATE:
+ if (optvallen_ != sizeof (int64_t)) {
+ errno = EINVAL;
+ return -1;
+ }
+ rate = (uint32_t) *((int64_t*) optval_);
+ return 0;
+
+ case ZMQ_RECOVERY_IVL:
+ if (optvallen_ != sizeof (int64_t)) {
+ errno = EINVAL;
+ return -1;
+ }
+ recovery_ivl = (uint32_t) *((int64_t*) optval_);
+ return 0;
+
+ case ZMQ_MCAST_LOOP:
+ if (optvallen_ != sizeof (int64_t)) {
+ errno = EINVAL;
+ return -1;
+ }
+ if ((int64_t) *((int64_t*) optval_) == 0)
+ use_multicast_loop = false;
+ else if ((int64_t) *((int64_t*) optval_) == 1)
+ use_multicast_loop = true;
+ else {
+ errno = EINVAL;
+ return -1;
+ }
+ return 0;
+ }
+
+ errno = EINVAL;
+ return -1;
+}