options.hpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #ifndef __ZMQ_OPTIONS_HPP_INCLUDED__
4 #define __ZMQ_OPTIONS_HPP_INCLUDED__
5 
6 #include <string>
7 #include <vector>
8 #include <map>
9 
10 #include "atomic_ptr.hpp"
11 #include "stddef.h"
12 #include "stdint.hpp"
13 #include "tcp_address.hpp"
14 
15 #if defined ZMQ_HAVE_SO_PEERCRED || defined ZMQ_HAVE_LOCAL_PEERCRED
16 #include <set>
17 #include <sys/types.h>
18 #endif
19 #ifdef ZMQ_HAVE_LOCAL_PEERCRED
20 #include <sys/ucred.h>
21 #endif
22 
23 #if __cplusplus >= 201103L || (defined _MSC_VER && _MSC_VER >= 1700)
24 #include <type_traits>
25 #endif
26 
27 // Normal base 256 key is 32 bytes
28 #define CURVE_KEYSIZE 32
29 // Key encoded using Z85 is 40 bytes
30 #define CURVE_KEYSIZE_Z85 40
31 
32 namespace zmq
33 {
34 struct options_t
35 {
36  options_t ();
37 
38  int set_curve_key (uint8_t *destination_,
39  const void *optval_,
40  size_t optvallen_);
41 
42  int setsockopt (int option_, const void *optval_, size_t optvallen_);
43  int getsockopt (int option_, void *optval_, size_t *optvallen_) const;
44 
45  // High-water marks for message pipes.
46  int sndhwm;
47  int rcvhwm;
48 
49  // I/O thread affinity.
50  uint64_t affinity;
51 
52  // Socket routing id.
53  unsigned char routing_id_size;
54  unsigned char routing_id[256];
55 
56  // Maximum transfer rate [kb/s]. Default 100kb/s.
57  int rate;
58 
59  // Reliability time interval [ms]. Default 10 seconds.
61 
62  // Sets the time-to-live field in every multicast packet sent.
64 
65  // Sets the maximum transport data unit size in every multicast
66  // packet sent.
68 
69  // SO_SNDBUF and SO_RCVBUF to be passed to underlying transport sockets.
70  int sndbuf;
71  int rcvbuf;
72 
73  // Type of service (containing DSCP and ECN socket options)
74  int tos;
75 
76  // Protocol-defined priority
77  int priority;
78 
79  // Socket type.
80  int8_t type;
81 
82  // Linger time, in milliseconds.
84 
85  // Maximum interval in milliseconds beyond which userspace will
86  // timeout connect().
87  // Default 0 (unused)
89 
90  // Maximum interval in milliseconds beyond which TCP will timeout
91  // retransmitted packets.
92  // Default 0 (unused)
93  int tcp_maxrt;
94 
95  // Disable reconnect under certain conditions
96  // Default 0
98 
99  // Minimum interval between attempts to reconnect, in milliseconds.
100  // Default 100ms
102 
103  // Maximum interval between attempts to reconnect, in milliseconds.
104  // Default 0ms (meaning maximum interval is disabled)
106 
107  // Maximum backlog for pending connections.
108  int backlog;
109 
110  // Maximal size of message to handle.
111  int64_t maxmsgsize;
112 
113  // The timeout for send/recv operations for this socket, in milliseconds.
114  int rcvtimeo;
115  int sndtimeo;
116 
117  // If true, IPv6 is enabled (as well as IPv4)
118  bool ipv6;
119 
120  // If 1, connecting pipes are not attached immediately, meaning a send()
121  // on a socket with only connecting pipes would block
123 
124  // If 1, (X)SUB socket should filter the messages. If 0, it should not.
125  bool filter;
126 
127  // If true, the subscription matching on (X)PUB and (X)SUB sockets
128  // is reversed. Messages are sent to and received by non-matching
129  // sockets.
131 
132  // If true, the routing id message is forwarded to the socket.
134 
135  // if true, router socket accepts non-zmq tcp connections
137  bool raw_notify; // Provide connect notifications
138 
139  // Address of SOCKS proxy
141 
142  // Credentials for SOCKS proxy.
143  // Connection method will be basic auth if username
144  // is not empty, no auth otherwise.
147 
148  // TCP keep-alive settings.
149  // Defaults to -1 = do not change socket options
154 
155  // TCP accept() filters
156  typedef std::vector<tcp_address_mask_t> tcp_accept_filters_t;
158 
159  // IPC accept() filters
160 #if defined ZMQ_HAVE_SO_PEERCRED || defined ZMQ_HAVE_LOCAL_PEERCRED
161  typedef std::set<uid_t> ipc_uid_accept_filters_t;
162  ipc_uid_accept_filters_t ipc_uid_accept_filters;
163  typedef std::set<gid_t> ipc_gid_accept_filters_t;
164  ipc_gid_accept_filters_t ipc_gid_accept_filters;
165 #endif
166 #if defined ZMQ_HAVE_SO_PEERCRED
167  typedef std::set<pid_t> ipc_pid_accept_filters_t;
168  ipc_pid_accept_filters_t ipc_pid_accept_filters;
169 #endif
170 
171  // Security mechanism for all connections on this socket
173 
174  // If peer is acting as server for PLAIN or CURVE mechanisms
176 
177  // ZAP authentication domain
179 
180  // Security credentials for PLAIN mechanism
183 
184  // Security credentials for CURVE mechanism
188 
189  // Principals for GSSAPI mechanism
192 
193  // Name types GSSAPI principals
196 
197  // If true, gss encryption will be disabled
199 
200  // ID of the socket.
202 
203  // If true, socket conflates outgoing/incoming messages.
204  // Applicable to dealer, push/pull, pub/sub socket types.
205  // Cannot receive multi-part messages.
206  // Ignores hwm
207  bool conflate;
208 
209  // If connection handshake is not done after this many milliseconds,
210  // close socket. Default is 30 secs. 0 means no handshake timeout.
212 
213  bool connected;
214  // If remote peer receives a PING message and doesn't receive another
215  // message within the ttl value, it should close the connection
216  // (measured in tenths of a second)
217  uint16_t heartbeat_ttl;
218  // Time in milliseconds between sending heartbeat PING messages.
220  // Time in milliseconds to wait for a PING response before disconnecting
222 
223 #if defined ZMQ_HAVE_VMCI
224  uint64_t vmci_buffer_size;
225  uint64_t vmci_buffer_min_size;
226  uint64_t vmci_buffer_max_size;
227  int vmci_connect_timeout;
228 #endif
229 
230  // When creating a new ZMQ socket, if this option is set the value
231  // will be used as the File Descriptor instead of allocating a new
232  // one via the socket () system call.
233  int use_fd;
234 
235  // Device to bind the underlying socket to, eg. VRF or interface
237 
238  // Enforce a non-empty ZAP domain requirement for PLAIN auth
240 
241  // Use of loopback fastpath.
243 
244  // Loop sent multicast packets to local sockets
246 
247  // Maximal batching size for engines with receiving functionality.
248  // So, if there are 10 messages that fit into the batch size, all of
249  // them may be read by a single 'recv' system call, thus avoiding
250  // unnecessary network stack traversals.
252  // Maximal batching size for engines with sending functionality.
253  // So, if there are 10 messages that fit into the batch size, all of
254  // them may be written by a single 'send' system call, thus avoiding
255  // unnecessary network stack traversals.
257 
258  // Use zero copy strategy for storing message content when decoding.
259  bool zero_copy;
260 
261  // Router socket ZMQ_NOTIFY_CONNECT/ZMQ_NOTIFY_DISCONNECT notifications
263 
264  // Application metadata
265  std::map<std::string, std::string> app_metadata;
266 
267  // Version of monitor events to emit
269 
270  // WSS Keys
276 
277  // Hello msg
278  std::vector<unsigned char> hello_msg;
280 
281  // Disconnect msg
282  std::vector<unsigned char> disconnect_msg;
284 
285  // Hiccup msg
286  std::vector<unsigned char> hiccup_msg;
288 
289  // NORM Options
298 
299  // This option removes several delays caused by scheduling, interrupts and context switching.
301 };
302 
304 {
305  // conflate is only effective for some socket types
306  return options.conflate
307  && (options.type == ZMQ_DEALER || options.type == ZMQ_PULL
308  || options.type == ZMQ_PUSH || options.type == ZMQ_PUB
309  || options.type == ZMQ_SUB);
310 }
311 
312 int do_getsockopt (void *optval_,
313  size_t *optvallen_,
314  const void *value_,
315  size_t value_len_);
316 
317 template <typename T>
318 int do_getsockopt (void *const optval_, size_t *const optvallen_, T value_)
319 {
320 #if __cplusplus >= 201103L && (!defined(__GNUC__) || __GNUC__ > 5)
322  "invalid use of do_getsockopt");
323 #endif
324  return do_getsockopt (optval_, optvallen_, &value_, sizeof (T));
325 }
326 
327 int do_getsockopt (void *optval_,
328  size_t *optvallen_,
329  const std::string &value_);
330 
331 int do_setsockopt_int_as_bool_strict (const void *optval_,
332  size_t optvallen_,
333  bool *out_value_);
334 
335 int do_setsockopt_int_as_bool_relaxed (const void *optval_,
336  size_t optvallen_,
337  bool *out_value_);
338 }
339 
340 #endif
zmq::options_t::wss_cert_pem
std::string wss_cert_pem
Definition: options.hpp:272
zmq::options_t::hello_msg
std::vector< unsigned char > hello_msg
Definition: options.hpp:278
zmq::options_t::out_batch_size
int out_batch_size
Definition: options.hpp:256
zmq::options_t::tcp_keepalive_idle
int tcp_keepalive_idle
Definition: options.hpp:152
zmq::options_t::curve_server_key
uint8_t curve_server_key[CURVE_KEYSIZE]
Definition: options.hpp:187
zmq::options_t::curve_public_key
uint8_t curve_public_key[CURVE_KEYSIZE]
Definition: options.hpp:185
zmq::options_t::zero_copy
bool zero_copy
Definition: options.hpp:259
zmq::options_t
Definition: options.hpp:34
zmq::options_t::as_server
int as_server
Definition: options.hpp:175
zmq::options_t::rcvhwm
int rcvhwm
Definition: options.hpp:47
zmq::options_t::raw_socket
bool raw_socket
Definition: options.hpp:136
ZMQ_PUB
#define ZMQ_PUB
Definition: zmq.h:259
options
Message * options
Definition: src/google/protobuf/descriptor.cc:3119
zmq::options_t::mechanism
int mechanism
Definition: options.hpp:172
zmq::options_t::app_metadata
std::map< std::string, std::string > app_metadata
Definition: options.hpp:265
zmq::options_t::filter
bool filter
Definition: options.hpp:125
zmq::options_t::tcp_keepalive_intvl
int tcp_keepalive_intvl
Definition: options.hpp:153
zmq::do_setsockopt_int_as_bool_strict
int do_setsockopt_int_as_bool_strict(const void *optval_, size_t optvallen_, bool *out_value_)
Definition: options.cpp:89
zmq::options_t::norm_unicast_nacks
bool norm_unicast_nacks
Definition: options.hpp:291
zmq::options_t::gss_principal
std::string gss_principal
Definition: options.hpp:190
zmq::options_t::norm_num_parity
int norm_num_parity
Definition: options.hpp:295
zmq::options_t::sndtimeo
int sndtimeo
Definition: options.hpp:115
zmq::options_t::heartbeat_interval
int heartbeat_interval
Definition: options.hpp:219
string
GLsizei const GLchar *const * string
Definition: glcorearb.h:3083
zmq::do_getsockopt
int do_getsockopt(void *optval_, size_t *optvallen_, const void *value_, size_t value_len_)
Definition: options.cpp:39
zmq::options_t::bound_device
std::string bound_device
Definition: options.hpp:236
zmq::options_t::reconnect_ivl
int reconnect_ivl
Definition: options.hpp:101
zmq::options_t::gss_service_principal
std::string gss_service_principal
Definition: options.hpp:191
zmq::options_t::rcvtimeo
int rcvtimeo
Definition: options.hpp:114
zmq::options_t::norm_segment_size
int norm_segment_size
Definition: options.hpp:293
ZMQ_SUB
#define ZMQ_SUB
Definition: zmq.h:260
zmq::options_t::in_batch_size
int in_batch_size
Definition: options.hpp:251
T
#define T(upbtypeconst, upbtype, ctype, default_value)
zmq::options_t::tos
int tos
Definition: options.hpp:74
zmq::do_setsockopt_int_as_bool_relaxed
int do_setsockopt_int_as_bool_relaxed(const void *optval_, size_t optvallen_, bool *out_value_)
Definition: options.cpp:106
zmq::options_t::immediate
int immediate
Definition: options.hpp:122
zmq::options_t::tcp_maxrt
int tcp_maxrt
Definition: options.hpp:93
zmq::options_t::zap_domain
std::string zap_domain
Definition: options.hpp:178
zmq::options_t::plain_username
std::string plain_username
Definition: options.hpp:181
zmq::options_t::heartbeat_timeout
int heartbeat_timeout
Definition: options.hpp:221
zmq::options_t::tcp_keepalive
int tcp_keepalive
Definition: options.hpp:150
zmq::options_t::tcp_accept_filters_t
std::vector< tcp_address_mask_t > tcp_accept_filters_t
Definition: options.hpp:156
zmq::options_t::affinity
uint64_t affinity
Definition: options.hpp:50
zmq::atomic_value_t
Definition: atomic_ptr.hpp:212
zmq
Definition: zmq.hpp:229
zmq::options_t::can_send_hello_msg
bool can_send_hello_msg
Definition: options.hpp:279
zmq::options_t::tcp_keepalive_cnt
int tcp_keepalive_cnt
Definition: options.hpp:151
ZMQ_DEALER
#define ZMQ_DEALER
Definition: zmq.h:263
zmq::options_t::curve_secret_key
uint8_t curve_secret_key[CURVE_KEYSIZE]
Definition: options.hpp:186
zmq::options_t::loopback_fastpath
bool loopback_fastpath
Definition: options.hpp:242
stdint.hpp
zmq::options_t::set_curve_key
int set_curve_key(uint8_t *destination_, const void *optval_, size_t optvallen_)
Definition: options.cpp:254
zmq::options_t::connected
bool connected
Definition: options.hpp:213
ZMQ_PUSH
#define ZMQ_PUSH
Definition: zmq.h:266
zmq::options_t::can_recv_hiccup_msg
bool can_recv_hiccup_msg
Definition: options.hpp:287
zmq::options_t::routing_id_size
unsigned char routing_id_size
Definition: options.hpp:53
zmq::options_t::gss_plaintext
bool gss_plaintext
Definition: options.hpp:198
tcp_address.hpp
zmq::options_t::connect_timeout
int connect_timeout
Definition: options.hpp:88
zmq::options_t::router_notify
int router_notify
Definition: options.hpp:262
zmq::options_t::gss_principal_nt
int gss_principal_nt
Definition: options.hpp:194
zmq::options_t::recv_routing_id
bool recv_routing_id
Definition: options.hpp:133
zmq::options_t::setsockopt
int setsockopt(int option_, const void *optval_, size_t optvallen_)
Definition: options.cpp:294
zmq::options_t::wss_hostname
std::string wss_hostname
Definition: options.hpp:274
zmq::options_t::options_t
options_t()
Definition: options.cpp:170
zmq::options_t::plain_password
std::string plain_password
Definition: options.hpp:182
zmq::options_t::wss_trust_system
bool wss_trust_system
Definition: options.hpp:275
zmq::options_t::linger
atomic_value_t linger
Definition: options.hpp:83
zmq::options_t::handshake_ivl
int handshake_ivl
Definition: options.hpp:211
zmq::get_effective_conflate_option
bool get_effective_conflate_option(const options_t &options)
Definition: options.hpp:303
zmq::options_t::disconnect_msg
std::vector< unsigned char > disconnect_msg
Definition: options.hpp:282
zmq::options_t::recovery_ivl
int recovery_ivl
Definition: options.hpp:60
zmq::options_t::heartbeat_ttl
uint16_t heartbeat_ttl
Definition: options.hpp:217
zmq::options_t::norm_block_size
int norm_block_size
Definition: options.hpp:294
value_
int value_
Definition: gmock-matchers_test.cc:571
zmq::options_t::multicast_loop
bool multicast_loop
Definition: options.hpp:245
zmq::options_t::norm_push_enable
bool norm_push_enable
Definition: options.hpp:297
zmq::options_t::conflate
bool conflate
Definition: options.hpp:207
zmq::options_t::tcp_accept_filters
tcp_accept_filters_t tcp_accept_filters
Definition: options.hpp:157
zmq::options_t::ipv6
bool ipv6
Definition: options.hpp:118
zmq::options_t::multicast_maxtpdu
int multicast_maxtpdu
Definition: options.hpp:67
zmq::options_t::use_fd
int use_fd
Definition: options.hpp:233
zmq::options_t::rate
int rate
Definition: options.hpp:57
zmq::options_t::socks_proxy_address
std::string socks_proxy_address
Definition: options.hpp:140
zmq::options_t::rcvbuf
int rcvbuf
Definition: options.hpp:71
zmq::options_t::socket_id
int socket_id
Definition: options.hpp:201
zmq::options_t::backlog
int backlog
Definition: options.hpp:108
zmq::options_t::sndbuf
int sndbuf
Definition: options.hpp:70
zmq::options_t::norm_buffer_size
int norm_buffer_size
Definition: options.hpp:292
zmq::options_t::raw_notify
bool raw_notify
Definition: options.hpp:137
zmq::options_t::invert_matching
bool invert_matching
Definition: options.hpp:130
zmq::options_t::sndhwm
int sndhwm
Definition: options.hpp:46
zmq::options_t::maxmsgsize
int64_t maxmsgsize
Definition: options.hpp:111
zmq::options_t::norm_num_autoparity
int norm_num_autoparity
Definition: options.hpp:296
zmq::options_t::can_recv_disconnect_msg
bool can_recv_disconnect_msg
Definition: options.hpp:283
zmq::options_t::multicast_hops
int multicast_hops
Definition: options.hpp:63
zmq::options_t::priority
int priority
Definition: options.hpp:77
zmq::options_t::wss_key_pem
std::string wss_key_pem
Definition: options.hpp:271
zmq::options_t::wss_trust_pem
std::string wss_trust_pem
Definition: options.hpp:273
value
GLsizei const GLfloat * value
Definition: glcorearb.h:3093
zmq::options_t::zap_enforce_domain
bool zap_enforce_domain
Definition: options.hpp:239
atomic_ptr.hpp
zmq::options_t::monitor_event_version
int monitor_event_version
Definition: options.hpp:268
CURVE_KEYSIZE
#define CURVE_KEYSIZE
Definition: options.hpp:28
ZMQ_PULL
#define ZMQ_PULL
Definition: zmq.h:265
zmq::options_t::reconnect_stop
int reconnect_stop
Definition: options.hpp:97
zmq::options_t::routing_id
unsigned char routing_id[256]
Definition: options.hpp:54
zmq::options_t::type
int8_t type
Definition: options.hpp:80
zmq::options_t::gss_service_principal_nt
int gss_service_principal_nt
Definition: options.hpp:195
zmq::options_t::norm_mode
int norm_mode
Definition: options.hpp:290
zmq::options_t::reconnect_ivl_max
int reconnect_ivl_max
Definition: options.hpp:105
zmq::options_t::getsockopt
int getsockopt(int option_, void *optval_, size_t *optvallen_) const
Definition: options.cpp:938
zmq::options_t::busy_poll
int busy_poll
Definition: options.hpp:300
zmq::options_t::socks_proxy_password
std::string socks_proxy_password
Definition: options.hpp:146
zmq::options_t::socks_proxy_username
std::string socks_proxy_username
Definition: options.hpp:145
zmq::options_t::hiccup_msg
std::vector< unsigned char > hiccup_msg
Definition: options.hpp:286


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:57