zmq_setsockopt.txt 9.29 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 17


DESCRIPTION
-----------
Martin Lucina's avatar
Martin Lucina committed
18 19 20 21 22
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
23
The following socket options can be set with the _zmq_setsockopt()_ function:
Martin Lucina's avatar
Martin Lucina committed
24 25 26 27


ZMQ_HWM: Set high water mark
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28 29 30 31 32 33 34 35 36 37
The 'ZMQ_HWM' option shall set the high water mark for 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.
Martin Lucina's avatar
Martin Lucina committed
38 39 40

The default 'ZMQ_HWM' value of zero means "no limit".

41
[horizontal]
42
Option value type:: uint64_t
Martin Lucina's avatar
Martin Lucina committed
43 44 45 46 47 48 49
Option value unit:: messages
Default value:: 0
Applicable socket types:: all


ZMQ_SWAP: Set disk offload size
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50
The 'ZMQ_SWAP' option shall set the disk offload (swap) size for the specified
51
'socket'. A socket which has 'ZMQ_SWAP' set to a non-zero value may exceed it's
52 53
high water mark; in this case outstanding messages shall be offloaded to
storage on disk rather than held in memory.
Martin Lucina's avatar
Martin Lucina committed
54 55 56

The value of 'ZMQ_SWAP' defines the maximum size of the swap space in bytes.

57
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
58 59 60 61 62 63 64 65
Option value type:: int64_t
Option value unit:: bytes
Default value:: 0
Applicable socket types:: all


ZMQ_AFFINITY: Set I/O thread affinity
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Martin Lucina's avatar
Martin Lucina committed
66 67
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
68

69 70 71 72 73 74 75
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
76 77 78 79

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

80
[horizontal]
81
Option value type:: uint64_t
Martin Lucina's avatar
Martin Lucina committed
82 83 84 85 86 87 88
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
89 90 91 92
The 'ZMQ_IDENTITY' option shall set the identity of the specified 'socket'.
Socket identity determines if existing 0MQ infastructure (_message queues_,
_forwarding devices_) shall be identified with a specific application and
persist across multiple runs of the application.
Martin Lucina's avatar
Martin Lucina committed
93 94 95 96 97 98 99 100 101 102

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.

103
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
104
Option value type:: binary data
Martin Lucina's avatar
Martin Lucina committed
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
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
with the specified prefix. Mutiple filters may be attached to a single
'ZMQ_SUB' socket, in which case a message shall be accepted if it matches at
least one filter.

122
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
123
Option value type:: binary data
Martin Lucina's avatar
Martin Lucina committed
124 125 126 127 128 129 130 131 132 133 134 135 136
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.

137
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
138
Option value type:: binary data
Martin Lucina's avatar
Martin Lucina committed
139 140 141 142 143 144 145 146
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
147
multicast transports such as linkzmq:zmq_pgm[7] using the specified 'socket'.
Martin Lucina's avatar
Martin Lucina committed
148

149
[horizontal]
150
Option value type:: int64_t
Martin Lucina's avatar
Martin Lucina committed
151 152 153 154 155 156 157 158
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
159 160 161
transports using the specified 'socket'. The recovery interval determines the
maximum time in seconds that a receiver can be absent from a multicast group
before unrecoverable data loss will occur.
Martin Lucina's avatar
Martin Lucina committed
162 163 164 165 166

CAUTION: Excersize 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.

167
[horizontal]
168
Option value type:: int64_t
Martin Lucina's avatar
Martin Lucina committed
169 170 171 172 173 174 175 176
Option value unit:: seconds
Default value:: 10
Applicable socket types:: all, when using multicast transports


ZMQ_MCAST_LOOP: Control multicast loopback
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The 'ZMQ_MCAST_LOOP' option shall control whether data sent via multicast
Martin Lucina's avatar
Martin Lucina committed
177 178 179 180 181 182
transports using the specified 'socket' can also be received by the sending
host via loopback. A value of zero disables the loopback functionality, while
the default value of 1 enables the loopback functionality. Leaving multicast
loopback enabled when it is not required can have a negative impact on
performance. Where possible, disable 'ZMQ_MCAST_LOOP' in production
environments.
Martin Lucina's avatar
Martin Lucina committed
183

184
[horizontal]
185
Option value type:: int64_t
Martin Lucina's avatar
Martin Lucina committed
186 187 188 189 190 191 192 193
Option value unit:: boolean
Default value:: 1
Applicable socket types:: all, when using multicast transports


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
194 195
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
196 197
documentation for the 'SO_SNDBUF' socket option.

198
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
199 200 201 202 203 204 205 206 207
Option value type:: uint64_t
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
208 209 210
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
211

212
[horizontal]
Martin Lucina's avatar
Martin Lucina committed
213 214 215 216
Option value type:: uint64_t
Option value unit:: bytes
Default value:: 0
Applicable socket types:: all
217

218 219 220

RETURN VALUE
------------
Martin Lucina's avatar
Martin Lucina committed
221
The _zmq_setsockopt()_ function shall return zero if successful. Otherwise it
Martin Lucina's avatar
Martin Lucina committed
222
shall return `-1` and set 'errno' to one of the values defined below.
223 224 225 226 227


ERRORS
------
*EINVAL*::
Martin Lucina's avatar
Martin Lucina committed
228 229
The requested option _option_name_ is unknown, or the requested _option_len_ or
_option_value_ is invalid.
230
*ETERM*::
Martin Lucina's avatar
Martin Lucina committed
231
The 0MQ 'context' associated with the specified 'socket' was terminated.
232 233
*EFAULT*::
The provided 'socket' was not valid (NULL).
234 235
*EINTR*::
The operation was interrupted by delivery of a signal.
236

237 238 239

EXAMPLE
-------
Martin Lucina's avatar
Martin Lucina committed
240
.Subscribing to messages on a 'ZMQ_SUB' socket
241
----
Martin Lucina's avatar
Martin Lucina committed
242 243
/* Subscribe to all messages */
rc = zmq_setsockopt (socket, ZMQ_SUBSCRIBE, "", 0);
244
assert (rc == 0);
Martin Lucina's avatar
Martin Lucina committed
245 246 247 248 249 250
/* 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
251
int64_t affinity;
Martin Lucina's avatar
Martin Lucina committed
252
/* Incoming connections on TCP port 5555 shall be handled by I/O thread 1 */
Martin Lucina's avatar
Martin Lucina committed
253 254
affinity = 1;
rc = zmq_setsockopt (socket, ZMQ_AFFINITY, &affinity, sizeof affinity);
Martin Lucina's avatar
Martin Lucina committed
255 256 257 258
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
259 260
affinity = 2;
rc = zmq_setsockopt (socket, ZMQ_AFFINITY, &affinity, sizeof affinity);
Martin Lucina's avatar
Martin Lucina committed
261
assert (rc);
262
rc = zmq_bind (socket, "tcp://lo:5556");
Martin Lucina's avatar
Martin Lucina committed
263
assert (rc);
264 265 266 267 268
----


SEE ALSO
--------
Martin Lucina's avatar
Martin Lucina committed
269
linkzmq:zmq_getsockopt[3]
270 271 272
linkzmq:zmq_socket[3]
linkzmq:zmq[7]

273

274 275 276 277
AUTHORS
-------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and
Martin Lucina <mato@kotelna.sk>.