diff --git a/include/zmq.h b/include/zmq.h index aaf3d55e..fd86f15e 100644 --- a/include/zmq.h +++ b/include/zmq.h @@ -320,6 +320,7 @@ ZMQ_EXPORT uint32_t zmq_msg_get_routing_id(zmq_msg_t *msg); #define ZMQ_HEARTBEAT_TTL 76 #define ZMQ_HEARTBEAT_TIMEOUT 77 #define ZMQ_XPUB_VERBOSE_UNSUBSCRIBE 78 +#define ZMQ_CONNECT_TIMEOUT 79 /* Message options */ #define ZMQ_MORE 1 diff --git a/src/options.cpp b/src/options.cpp index 6d4d000d..40ba22a9 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -46,6 +46,7 @@ zmq::options_t::options_t () : tos (0), type (-1), linger (-1), + connect_timeout (0), reconnect_ivl (100), reconnect_ivl_max (0), backlog (100), @@ -158,6 +159,13 @@ int zmq::options_t::setsockopt (int option_, const void *optval_, } break; + case ZMQ_CONNECT_TIMEOUT: + if (is_int && value >= 0) { + connect_timeout = value; + return 0; + } + break; + case ZMQ_RECONNECT_IVL: if (is_int && value >= -1) { reconnect_ivl = value; @@ -653,6 +661,13 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_) } break; + case ZMQ_CONNECT_TIMEOUT: + if (is_int) { + *value = connect_timeout; + return 0; + } + break; + case ZMQ_RECONNECT_IVL: if (is_int) { *value = reconnect_ivl; diff --git a/src/options.hpp b/src/options.hpp index bdaea966..e0b1d2a0 100644 --- a/src/options.hpp +++ b/src/options.hpp @@ -92,6 +92,11 @@ namespace zmq // Linger time, in milliseconds. int linger; + // Maximum interval in milliseconds beyond which userspace will + // timeout connect(). + // Default 0 (unused) + int connect_timeout; + // Minimum interval between attempts to reconnect, in milliseconds. // Default 100ms int reconnect_ivl;