From 87beaaa00d49d216f856b8322f1ad04e4f9ecea3 Mon Sep 17 00:00:00 2001 From: Gonzalo Diethelm Date: Tue, 28 Sep 2010 15:27:45 +0200 Subject: ZMQ_TYPE socket option added --- .gitignore | 1 + doc/zmq_getsockopt.txt | 13 +++++++++++++ include/zmq.h | 1 + src/options.cpp | 10 ++++++++++ src/options.hpp | 3 +++ src/pair.cpp | 1 + src/pub.cpp | 1 + src/pull.cpp | 1 + src/push.cpp | 1 + src/rep.cpp | 1 + src/req.cpp | 1 + src/sub.cpp | 1 + src/xrep.cpp | 1 + src/xreq.cpp | 1 + 14 files changed, 37 insertions(+) diff --git a/.gitignore b/.gitignore index 5093ef3..23e2fdd 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ doc/*.7 doc/*.html doc/*.xml src/libzmq.pc +bin/ lib/ builds/msvc/*.suo builds/msvc/*/*.user diff --git a/doc/zmq_getsockopt.txt b/doc/zmq_getsockopt.txt index a2677c7..5fee978 100644 --- a/doc/zmq_getsockopt.txt +++ b/doc/zmq_getsockopt.txt @@ -26,6 +26,19 @@ value stored in the buffer. The following options can be retrieved with the _zmq_getsockopt()_ function: +ZMQ_TYPE: Retrieve socket type. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The 'ZMQ_TYPE option shall retrieve the socket type for the specified +'socket'. The socket type is specified at socket creation time and +cannot be modified afterwards. + +[horizontal] +Option value type:: int +Option value unit:: N/A +Default value:: N/A +Applicable socket types:: all + + ZMQ_RCVMORE: More message parts to follow ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The 'ZMQ_RCVMORE' option shall return a boolean value indicating if the diff --git a/include/zmq.h b/include/zmq.h index c5f79d4..b8ab6d4 100644 --- a/include/zmq.h +++ b/include/zmq.h @@ -179,6 +179,7 @@ ZMQ_EXPORT int zmq_term (void *context); #define ZMQ_RCVMORE 13 #define ZMQ_FD 14 #define ZMQ_EVENTS 15 +#define ZMQ_TYPE 16 /* Send/recv options. */ #define ZMQ_NOBLOCK 1 diff --git a/src/options.cpp b/src/options.cpp index dcbb51d..e644a9b 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -33,6 +33,7 @@ zmq::options_t::options_t () : use_multicast_loop (true), sndbuf (0), rcvbuf (0), + type (-1), requires_in (false), requires_out (false), immediate_connect (true) @@ -137,6 +138,15 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_) { switch (option_) { + case ZMQ_TYPE: + if (*optvallen_ < sizeof (int)) { + errno = EINVAL; + return -1; + } + *((int*) optval_) = type; + *optvallen_ = sizeof (int); + return 0; + case ZMQ_HWM: if (*optvallen_ < sizeof (uint64_t)) { errno = EINVAL; diff --git a/src/options.hpp b/src/options.hpp index 908b166..ea0c841 100644 --- a/src/options.hpp +++ b/src/options.hpp @@ -51,6 +51,9 @@ namespace zmq uint64_t sndbuf; uint64_t rcvbuf; + // Socket type. + int type; + // These options are never set by the user directly. Instead they are // provided by the specific socket type. bool requires_in; diff --git a/src/pair.cpp b/src/pair.cpp index faea167..f5df59f 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -31,6 +31,7 @@ zmq::pair_t::pair_t (class ctx_t *parent_, uint32_t slot_) : outpipe_alive (false), terminating (false) { + options.type = ZMQ_PAIR; options.requires_in = true; options.requires_out = true; } diff --git a/src/pub.cpp b/src/pub.cpp index 6edd991..b1a1239 100644 --- a/src/pub.cpp +++ b/src/pub.cpp @@ -29,6 +29,7 @@ zmq::pub_t::pub_t (class ctx_t *parent_, uint32_t slot_) : active (0), terminating (false) { + options.type = ZMQ_PUB; options.requires_in = false; options.requires_out = true; } diff --git a/src/pull.cpp b/src/pull.cpp index cbfcdbf..c5f6a8e 100644 --- a/src/pull.cpp +++ b/src/pull.cpp @@ -26,6 +26,7 @@ zmq::pull_t::pull_t (class ctx_t *parent_, uint32_t slot_) : socket_base_t (parent_, slot_), fq (this) { + options.type = ZMQ_PULL; options.requires_in = true; options.requires_out = false; } diff --git a/src/push.cpp b/src/push.cpp index 20943fc..f48f7bb 100644 --- a/src/push.cpp +++ b/src/push.cpp @@ -27,6 +27,7 @@ zmq::push_t::push_t (class ctx_t *parent_, uint32_t slot_) : socket_base_t (parent_, slot_), lb (this) { + options.type = ZMQ_PUSH; options.requires_in = false; options.requires_out = true; } diff --git a/src/rep.cpp b/src/rep.cpp index b2ada66..2904f06 100644 --- a/src/rep.cpp +++ b/src/rep.cpp @@ -27,6 +27,7 @@ zmq::rep_t::rep_t (class ctx_t *parent_, uint32_t slot_) : sending_reply (false), request_begins (true) { + options.type = ZMQ_REP; } zmq::rep_t::~rep_t () diff --git a/src/req.cpp b/src/req.cpp index 8a5126d..03203c5 100644 --- a/src/req.cpp +++ b/src/req.cpp @@ -27,6 +27,7 @@ zmq::req_t::req_t (class ctx_t *parent_, uint32_t slot_) : receiving_reply (false), message_begins (true) { + options.type = ZMQ_REQ; } zmq::req_t::~req_t () diff --git a/src/sub.cpp b/src/sub.cpp index bee8a06..825b350 100644 --- a/src/sub.cpp +++ b/src/sub.cpp @@ -30,6 +30,7 @@ zmq::sub_t::sub_t (class ctx_t *parent_, uint32_t slot_) : has_message (false), more (false) { + options.type = ZMQ_SUB; options.requires_in = true; options.requires_out = false; zmq_msg_init (&message); diff --git a/src/xrep.cpp b/src/xrep.cpp index c1cfb00..b8ad735 100644 --- a/src/xrep.cpp +++ b/src/xrep.cpp @@ -32,6 +32,7 @@ zmq::xrep_t::xrep_t (class ctx_t *parent_, uint32_t slot_) : more_out (false), terminating (false) { + options.type = ZMQ_XREP; options.requires_in = true; options.requires_out = true; diff --git a/src/xreq.cpp b/src/xreq.cpp index 2373f34..9f4eb92 100644 --- a/src/xreq.cpp +++ b/src/xreq.cpp @@ -27,6 +27,7 @@ zmq::xreq_t::xreq_t (class ctx_t *parent_, uint32_t slot_) : fq (this), lb (this) { + options.type = ZMQ_XREQ; options.requires_in = true; options.requires_out = true; } -- cgit v1.2.3