zmq_setsockopt.txt 13.3 KB
Newer Older
1 2 3 4 5 6 7
zmq_setsockopt(3)
=================


NAME
----

Martin Lucina's avatar
Martin Lucina committed
8
zmq_setsockopt - set 0MQ socket options
9 10 11 12


SYNOPSIS
--------
Martin Lucina's avatar
Martin Lucina committed
13
*int zmq_setsockopt (void '*socket', int 'option_name', const void '*option_value', size_t 'option_len');*
14

15 16
Caution: All options, with the exception of ZMQ_SUBSCRIBE, ZMQ_UNSUBSCRIBE and
ZMQ_LINGER, only take effect for subsequent socket bind/connects.
17 18 19

DESCRIPTION
-----------
Martin Lucina's avatar
Martin Lucina committed
20 21 22 23 24
The _zmq_setsockopt()_ function shall set the option specified by the
'option_name' argument to the value pointed to by the 'option_value' argument
for the 0MQ socket pointed to by the 'socket' argument. The 'option_len'
argument is the size of the option value in bytes.

Martin Lucina's avatar
Martin Lucina committed
25
The following socket options can be set with the _zmq_setsockopt()_ function:
Martin Lucina's avatar
Martin Lucina committed
26 27


28 29 30 31 32 33
ZMQ_SNDHWM: Set high water mark for outbound messages
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_SNDHWM' option shall set the high water mark for outbound messages on
the specified 'socket'. The high water mark is a hard limit on the maximum
number of outstanding messages 0MQ shall queue in memory for any single peer
that the specified 'socket' is communicating with.
34 35 36 37 38 39

If this limit has been reached the socket shall enter an exceptional state and
depending on the socket type, 0MQ shall take appropriate action such as
blocking or dropping sent messages. Refer to the individual socket descriptions
in linkzmq:zmq_socket[3] for details on the exact action taken for each socket
type.
Martin Lucina's avatar
Martin Lucina committed
40

41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
The default 'ZMQ_SNDHWM' value of zero means "no limit".

[horizontal]
Option value type:: int
Option value unit:: messages
Default value:: 0
Applicable socket types:: all


ZMQ_RCVHWM: Set high water mark for inbound messages
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_RCVHWM' option shall set the high water mark for inbound messages on
the specified 'socket'. The high water mark is a hard limit on the maximum
number of outstanding messages 0MQ shall queue in memory for any single peer
that the specified 'socket' is communicating with.

If this limit has been reached the socket shall enter an exceptional state and
depending on the socket type, 0MQ shall take appropriate action such as
blocking or dropping sent messages. Refer to the individual socket descriptions
in linkzmq:zmq_socket[3] for details on the exact action taken for each socket
type.

The default 'ZMQ_RCVHWM' value of zero means "no limit".
Martin Lucina's avatar
Martin Lucina committed
64

65
[horizontal]
66
Option value type:: int
Martin Lucina's avatar
Martin Lucina committed
67 68 69 70 71 72 73
Option value unit:: messages
Default value:: 0
Applicable socket types:: all


ZMQ_AFFINITY: Set I/O thread affinity
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Martin Lucina's avatar
Martin Lucina committed
74 75
The 'ZMQ_AFFINITY' option shall set the I/O thread affinity for newly created
connections on the specified 'socket'.
Martin Lucina's avatar
Martin Lucina committed
76

77 78 79 80 81 82 83
Affinity determines which threads from the 0MQ I/O thread pool associated with
the socket's _context_ shall handle newly created connections.  A value of zero
specifies no affinity, meaning that work shall be distributed fairly among all
0MQ I/O threads in the thread pool. For non-zero values, the lowest bit
corresponds to thread 1, second lowest bit to thread 2 and so on.  For example,
a value of 3 specifies that subsequent connections on 'socket' shall be handled
exclusively by I/O threads 1 and 2.
Martin Lucina's avatar
Martin Lucina committed
84 85 86 87

See also linkzmq:zmq_init[3] for details on allocating the number of I/O
threads for a specific _context_.

88
[horizontal]
89
Option value type:: uint64_t
Martin Lucina's avatar
Martin Lucina committed
90 91 92 93 94 95 96
Option value unit:: N/A (bitmap)
Default value:: 0
Applicable socket types:: N/A


ZMQ_IDENTITY: Set socket identity
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Martin Lucina's avatar
Martin Lucina committed
97
The 'ZMQ_IDENTITY' option shall set the identity of the specified 'socket'.
Jacob Rideout's avatar
Jacob Rideout committed
98
Socket identity determines if existing 0MQ infrastructure (_message queues_,
Martin Lucina's avatar
Martin Lucina committed
99 100
_forwarding devices_) shall be identified with a specific application and
persist across multiple runs of the application.
Martin Lucina's avatar
Martin Lucina committed
101 102 103 104 105 106 107 108 109 110

If the socket has no identity, each run of an application is completely
separate from other runs. However, with identity set the socket shall re-use
any existing 0MQ infrastructure configured by the previous run(s). Thus the
application may receive messages that were sent in the meantime, _message
queue_ limits shall be shared with previous run(s) and so on.

Identity should be at least one byte and at most 255 bytes long. Identities
starting with binary zero are reserved for use by 0MQ infrastructure.

111
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
112
Option value type:: binary data
Martin Lucina's avatar
Martin Lucina committed
113 114 115 116 117 118 119 120 121 122 123 124 125
Option value unit:: N/A
Default value:: NULL
Applicable socket types:: all


ZMQ_SUBSCRIBE: Establish message filter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_SUBSCRIBE' option shall establish a new message filter on a 'ZMQ_SUB'
socket. Newly created 'ZMQ_SUB' sockets shall filter out all incoming messages,
therefore you should call this option to establish an initial message filter.

An empty 'option_value' of length zero shall subscribe to all incoming
messages. A non-empty 'option_value' shall subscribe to all messages beginning
Jacob Rideout's avatar
Jacob Rideout committed
126
with the specified prefix. Multiple filters may be attached to a single
Martin Lucina's avatar
Martin Lucina committed
127 128 129
'ZMQ_SUB' socket, in which case a message shall be accepted if it matches at
least one filter.

130
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
131
Option value type:: binary data
Martin Lucina's avatar
Martin Lucina committed
132 133 134 135 136 137 138 139 140 141 142 143 144
Option value unit:: N/A
Default value:: N/A
Applicable socket types:: ZMQ_SUB


ZMQ_UNSUBSCRIBE: Remove message filter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_UNSUBSCRIBE' option shall remove an existing message filter on a
'ZMQ_SUB' socket. The filter specified must match an existing filter previously
established with the 'ZMQ_SUBSCRIBE' option. If the socket has several
instances of the same filter attached the 'ZMQ_UNSUBSCRIBE' option shall remove
only one instance, leaving the rest in place and functional.

145
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
146
Option value type:: binary data
Martin Lucina's avatar
Martin Lucina committed
147 148 149 150 151 152 153 154
Option value unit:: N/A
Default value:: N/A
Applicable socket types:: ZMQ_SUB


ZMQ_RATE: Set multicast data rate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_RATE' option shall set the maximum send or receive data rate for
Martin Lucina's avatar
Martin Lucina committed
155
multicast transports such as linkzmq:zmq_pgm[7] using the specified 'socket'.
Martin Lucina's avatar
Martin Lucina committed
156

157
[horizontal]
158
Option value type:: int
Martin Lucina's avatar
Martin Lucina committed
159 160 161 162 163 164 165 166
Option value unit:: kilobits per second
Default value:: 100
Applicable socket types:: all, when using multicast transports


ZMQ_RECOVERY_IVL: Set multicast recovery interval
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_RECOVERY_IVL' option shall set the recovery interval for multicast
Martin Lucina's avatar
Martin Lucina committed
167
transports using the specified 'socket'. The recovery interval determines the
168 169
maximum time in milliseconds that a receiver can be absent from a multicast
group before unrecoverable data loss will occur.
170 171 172 173 174 175

CAUTION: Exercise care when setting large recovery intervals as the data
needed for recovery will be held in memory. For example, a 1 minute recovery
interval at a data rate of 1Gbps requires a 7GB in-memory buffer.

[horizontal]
176
Option value type:: int
177
Option value unit:: milliseconds
178
Default value:: 10000
179 180
Applicable socket types:: all, when using multicast transports

Martin Lucina's avatar
Martin Lucina committed
181 182 183
ZMQ_SNDBUF: Set kernel transmit buffer size
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_SNDBUF' option shall set the underlying kernel transmit buffer size
Martin Lucina's avatar
Martin Lucina committed
184 185
for the 'socket' to the specified size in bytes.  A value of zero means leave
the OS default unchanged. For details please refer to your operating system
Martin Lucina's avatar
Martin Lucina committed
186 187
documentation for the 'SO_SNDBUF' socket option.

188
[horizontal]
189
Option value type:: int
Martin Lucina's avatar
Martin Lucina committed
190 191 192 193 194 195 196 197
Option value unit:: bytes
Default value:: 0
Applicable socket types:: all


ZMQ_RCVBUF: Set kernel receive buffer size
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_RCVBUF' option shall set the underlying kernel receive buffer size for
Martin Lucina's avatar
Martin Lucina committed
198 199 200
the 'socket' to the specified size in bytes.  A value of zero means leave the
OS default unchanged. For details refer to your operating system documentation
for the 'SO_RCVBUF' socket option.
Martin Lucina's avatar
Martin Lucina committed
201

202
[horizontal]
203
Option value type:: int
Martin Lucina's avatar
Martin Lucina committed
204 205 206
Option value unit:: bytes
Default value:: 0
Applicable socket types:: all
207

208

209 210
ZMQ_LINGER: Set linger period for socket shutdown
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
The 'ZMQ_LINGER' option shall set the linger period for the specified 'socket'.
The linger period determines how long pending messages which have yet to be
sent to a peer shall linger in memory after a socket is closed with
linkzmq:zmq_close[3], and further affects the termination of the socket's
context with linkzmq:zmq_term[3]. The following outlines the different
behaviours:

* The default value of '-1' specifies an infinite linger period. Pending
  messages shall not be discarded after a call to _zmq_close()_; attempting to
  terminate the socket's context with _zmq_term()_ shall block until all
  pending messages have been sent to a peer.

* The value of '0' specifies no linger period. Pending messages shall be
  discarded immediately when the socket is closed with _zmq_close()_.

* Positive values specify an upper bound for the linger period in milliseconds.
  Pending messages shall not be discarded after a call to _zmq_close()_;
  attempting to terminate the socket's context with _zmq_term()_ shall block
  until either all pending messages have been sent to a peer, or the linger
  period expires, after which any pending messages shall be discarded.
231 232 233 234

[horizontal]
Option value type:: int
Option value unit:: milliseconds
235
Default value:: -1 (infinite)
236 237 238
Applicable socket types:: all


239 240
ZMQ_RECONNECT_IVL: Set reconnection interval
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
241 242 243
The 'ZMQ_RECONNECT_IVL' option shall set the initial reconnection interval for
the specified 'socket'.  The reconnection interval is the period 0MQ
shall wait between attempts to reconnect disconnected peers when using
244 245 246 247
connection-oriented transports.

NOTE: The reconnection interval may be randomized by 0MQ to prevent
reconnection storms in topologies with a large number of peers per socket.
248 249 250 251 252

[horizontal]
Option value type:: int
Option value unit:: milliseconds
Default value:: 100
253
Applicable socket types:: all, only for connection-oriented transports
254 255


256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_RECONNECT_IVL_MAX' option shall set the maximum reconnection interval 
for the specified 'socket'.  This is the maximum period 0MQ shall wait between
attempts to reconnect. On each reconnect attempt, the previous interval shall be
doubled untill ZMQ_RECONNECT_IVL_MAX is reached. This allows for exponential
backoff strategy. Default value means no exponential backoff is performed and
reconnect interval calculations are only based on ZMQ_RECONNECT_IVL.

NOTE:  Values less than ZMQ_RECONNECT_IVL will be ignored.

[horizontal]
Option value type:: int
Option value unit:: milliseconds
Default value:: 0 (only use ZMQ_RECONNECT_IVL)
Applicable socket types:: all, only for connection-oriented transports


274 275 276 277 278 279
ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_BACKLOG' option shall set the maximum length of the queue of
outstanding peer connections for the specified 'socket'; this only applies to
connection-oriented transports. For details refer to your operating system
documentation for the 'listen' function.
280 281 282 283 284

[horizontal]
Option value type:: int
Option value unit:: connections
Default value:: 100
285
Applicable socket types:: all, only for connection-oriented transports.
286

287 288 289 290 291 292 293 294 295 296 297 298
ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Limits the size of the inbound message. If a peer sends a message larger than
ZMQ_MAXMSGSIZE it is disconnected. Value of -1 means 'no limit'.

[horizontal]
Option value type:: int64_t
Option value unit:: bytes
Default value:: -1
Applicable socket types:: all

299 300 301 302 303 304 305 306 307 308 309 310
ZMQ_MULTICAST_HOPS: Maximum network hops for multicast packets
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sets the time-to-live field in every multicast packet sent from this socket.
The default is 1 which means that the multicast packets don't leave the local
network.

[horizontal]
Option value type:: int
Option value unit:: network hops
Default value:: 1
Applicable socket types:: all, when using multicast transports
311

312 313
RETURN VALUE
------------
Martin Lucina's avatar
Martin Lucina committed
314
The _zmq_setsockopt()_ function shall return zero if successful. Otherwise it
Martin Lucina's avatar
Martin Lucina committed
315
shall return `-1` and set 'errno' to one of the values defined below.
316 317 318 319 320


ERRORS
------
*EINVAL*::
Martin Lucina's avatar
Martin Lucina committed
321 322
The requested option _option_name_ is unknown, or the requested _option_len_ or
_option_value_ is invalid.
323
*ETERM*::
Martin Lucina's avatar
Martin Lucina committed
324
The 0MQ 'context' associated with the specified 'socket' was terminated.
325 326
*ENOTSOCK*::
The provided 'socket' was invalid.
327 328
*EINTR*::
The operation was interrupted by delivery of a signal.
329

330 331 332

EXAMPLE
-------
Martin Lucina's avatar
Martin Lucina committed
333
.Subscribing to messages on a 'ZMQ_SUB' socket
334
----
Martin Lucina's avatar
Martin Lucina committed
335 336
/* Subscribe to all messages */
rc = zmq_setsockopt (socket, ZMQ_SUBSCRIBE, "", 0);
337
assert (rc == 0);
Martin Lucina's avatar
Martin Lucina committed
338 339 340 341 342 343
/* Subscribe to messages prefixed with "ANIMALS.CATS" */
rc = zmq_setsockopt (socket, ZMQ_SUBSCRIBE, "ANIMALS.CATS", 12);
----

.Setting I/O thread affinity
----
Martin Lucina's avatar
Martin Lucina committed
344
int64_t affinity;
Martin Lucina's avatar
Martin Lucina committed
345
/* Incoming connections on TCP port 5555 shall be handled by I/O thread 1 */
Martin Lucina's avatar
Martin Lucina committed
346 347
affinity = 1;
rc = zmq_setsockopt (socket, ZMQ_AFFINITY, &affinity, sizeof affinity);
Martin Lucina's avatar
Martin Lucina committed
348 349 350 351
assert (rc);
rc = zmq_bind (socket, "tcp://lo:5555");
assert (rc);
/* Incoming connections on TCP port 5556 shall be handled by I/O thread 2 */
Martin Lucina's avatar
Martin Lucina committed
352 353
affinity = 2;
rc = zmq_setsockopt (socket, ZMQ_AFFINITY, &affinity, sizeof affinity);
Martin Lucina's avatar
Martin Lucina committed
354
assert (rc);
355
rc = zmq_bind (socket, "tcp://lo:5556");
Martin Lucina's avatar
Martin Lucina committed
356
assert (rc);
357 358 359 360 361
----


SEE ALSO
--------
Martin Lucina's avatar
Martin Lucina committed
362
linkzmq:zmq_getsockopt[3]
363 364 365
linkzmq:zmq_socket[3]
linkzmq:zmq[7]

366

367 368 369 370
AUTHORS
-------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and
Martin Lucina <mato@kotelna.sk>.