Commit 87beaaa0 authored by Gonzalo Diethelm's avatar Gonzalo Diethelm Committed by Martin Sustrik

ZMQ_TYPE socket option added

parent 6715f9b1
...@@ -35,6 +35,7 @@ doc/*.7 ...@@ -35,6 +35,7 @@ doc/*.7
doc/*.html doc/*.html
doc/*.xml doc/*.xml
src/libzmq.pc src/libzmq.pc
bin/
lib/ lib/
builds/msvc/*.suo builds/msvc/*.suo
builds/msvc/*/*.user builds/msvc/*/*.user
......
...@@ -26,6 +26,19 @@ value stored in the buffer. ...@@ -26,6 +26,19 @@ value stored in the buffer.
The following options can be retrieved with the _zmq_getsockopt()_ function: 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 ZMQ_RCVMORE: More message parts to follow
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_RCVMORE' option shall return a boolean value indicating if the The 'ZMQ_RCVMORE' option shall return a boolean value indicating if the
......
...@@ -179,6 +179,7 @@ ZMQ_EXPORT int zmq_term (void *context); ...@@ -179,6 +179,7 @@ ZMQ_EXPORT int zmq_term (void *context);
#define ZMQ_RCVMORE 13 #define ZMQ_RCVMORE 13
#define ZMQ_FD 14 #define ZMQ_FD 14
#define ZMQ_EVENTS 15 #define ZMQ_EVENTS 15
#define ZMQ_TYPE 16
/* Send/recv options. */ /* Send/recv options. */
#define ZMQ_NOBLOCK 1 #define ZMQ_NOBLOCK 1
......
...@@ -33,6 +33,7 @@ zmq::options_t::options_t () : ...@@ -33,6 +33,7 @@ zmq::options_t::options_t () :
use_multicast_loop (true), use_multicast_loop (true),
sndbuf (0), sndbuf (0),
rcvbuf (0), rcvbuf (0),
type (-1),
requires_in (false), requires_in (false),
requires_out (false), requires_out (false),
immediate_connect (true) immediate_connect (true)
...@@ -137,6 +138,15 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_) ...@@ -137,6 +138,15 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_)
{ {
switch (option_) { switch (option_) {
case ZMQ_TYPE:
if (*optvallen_ < sizeof (int)) {
errno = EINVAL;
return -1;
}
*((int*) optval_) = type;
*optvallen_ = sizeof (int);
return 0;
case ZMQ_HWM: case ZMQ_HWM:
if (*optvallen_ < sizeof (uint64_t)) { if (*optvallen_ < sizeof (uint64_t)) {
errno = EINVAL; errno = EINVAL;
......
...@@ -51,6 +51,9 @@ namespace zmq ...@@ -51,6 +51,9 @@ namespace zmq
uint64_t sndbuf; uint64_t sndbuf;
uint64_t rcvbuf; uint64_t rcvbuf;
// Socket type.
int type;
// These options are never set by the user directly. Instead they are // These options are never set by the user directly. Instead they are
// provided by the specific socket type. // provided by the specific socket type.
bool requires_in; bool requires_in;
......
...@@ -31,6 +31,7 @@ zmq::pair_t::pair_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -31,6 +31,7 @@ zmq::pair_t::pair_t (class ctx_t *parent_, uint32_t slot_) :
outpipe_alive (false), outpipe_alive (false),
terminating (false) terminating (false)
{ {
options.type = ZMQ_PAIR;
options.requires_in = true; options.requires_in = true;
options.requires_out = true; options.requires_out = true;
} }
......
...@@ -29,6 +29,7 @@ zmq::pub_t::pub_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -29,6 +29,7 @@ zmq::pub_t::pub_t (class ctx_t *parent_, uint32_t slot_) :
active (0), active (0),
terminating (false) terminating (false)
{ {
options.type = ZMQ_PUB;
options.requires_in = false; options.requires_in = false;
options.requires_out = true; options.requires_out = true;
} }
......
...@@ -26,6 +26,7 @@ zmq::pull_t::pull_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -26,6 +26,7 @@ zmq::pull_t::pull_t (class ctx_t *parent_, uint32_t slot_) :
socket_base_t (parent_, slot_), socket_base_t (parent_, slot_),
fq (this) fq (this)
{ {
options.type = ZMQ_PULL;
options.requires_in = true; options.requires_in = true;
options.requires_out = false; options.requires_out = false;
} }
......
...@@ -27,6 +27,7 @@ zmq::push_t::push_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -27,6 +27,7 @@ zmq::push_t::push_t (class ctx_t *parent_, uint32_t slot_) :
socket_base_t (parent_, slot_), socket_base_t (parent_, slot_),
lb (this) lb (this)
{ {
options.type = ZMQ_PUSH;
options.requires_in = false; options.requires_in = false;
options.requires_out = true; options.requires_out = true;
} }
......
...@@ -27,6 +27,7 @@ zmq::rep_t::rep_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -27,6 +27,7 @@ zmq::rep_t::rep_t (class ctx_t *parent_, uint32_t slot_) :
sending_reply (false), sending_reply (false),
request_begins (true) request_begins (true)
{ {
options.type = ZMQ_REP;
} }
zmq::rep_t::~rep_t () zmq::rep_t::~rep_t ()
......
...@@ -27,6 +27,7 @@ zmq::req_t::req_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -27,6 +27,7 @@ zmq::req_t::req_t (class ctx_t *parent_, uint32_t slot_) :
receiving_reply (false), receiving_reply (false),
message_begins (true) message_begins (true)
{ {
options.type = ZMQ_REQ;
} }
zmq::req_t::~req_t () zmq::req_t::~req_t ()
......
...@@ -30,6 +30,7 @@ zmq::sub_t::sub_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -30,6 +30,7 @@ zmq::sub_t::sub_t (class ctx_t *parent_, uint32_t slot_) :
has_message (false), has_message (false),
more (false) more (false)
{ {
options.type = ZMQ_SUB;
options.requires_in = true; options.requires_in = true;
options.requires_out = false; options.requires_out = false;
zmq_msg_init (&message); zmq_msg_init (&message);
......
...@@ -32,6 +32,7 @@ zmq::xrep_t::xrep_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -32,6 +32,7 @@ zmq::xrep_t::xrep_t (class ctx_t *parent_, uint32_t slot_) :
more_out (false), more_out (false),
terminating (false) terminating (false)
{ {
options.type = ZMQ_XREP;
options.requires_in = true; options.requires_in = true;
options.requires_out = true; options.requires_out = true;
......
...@@ -27,6 +27,7 @@ zmq::xreq_t::xreq_t (class ctx_t *parent_, uint32_t slot_) : ...@@ -27,6 +27,7 @@ zmq::xreq_t::xreq_t (class ctx_t *parent_, uint32_t slot_) :
fq (this), fq (this),
lb (this) lb (this)
{ {
options.type = ZMQ_XREQ;
options.requires_in = true; options.requires_in = true;
options.requires_out = true; options.requires_out = true;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment