1ZSOCK(3) CZMQ Manual ZSOCK(3)
2
3
4
6 zsock - Class for high-level socket API that hides libzmq contexts and
7 sockets
8
10 // This is a stable class, and may not change except for emergencies. It
11 // is provided in stable builds.
12 // This class has draft methods, which may change over time. They are not
13 // in stable releases, by default. Use --enable-drafts to enable.
14 // Create a new socket. Returns the new socket, or NULL if the new socket
15 // could not be created. Note that the symbol zsock_new (and other
16 // constructors/destructors for zsock) are redirected to the *_checked
17 // variant, enabling intelligent socket leak detection. This can have
18 // performance implications if you use a LOT of sockets. To turn off this
19 // redirection behaviour, define ZSOCK_NOCHECK.
20 CZMQ_EXPORT zsock_t *
21 zsock_new (int type);
22
23 // Create a PUB socket. Default action is bind.
24 CZMQ_EXPORT zsock_t *
25 zsock_new_pub (const char *endpoint);
26
27 // Create a SUB socket, and optionally subscribe to some prefix string. Default
28 // action is connect.
29 CZMQ_EXPORT zsock_t *
30 zsock_new_sub (const char *endpoint, const char *subscribe);
31
32 // Create a REQ socket. Default action is connect.
33 CZMQ_EXPORT zsock_t *
34 zsock_new_req (const char *endpoint);
35
36 // Create a REP socket. Default action is bind.
37 CZMQ_EXPORT zsock_t *
38 zsock_new_rep (const char *endpoint);
39
40 // Create a DEALER socket. Default action is connect.
41 CZMQ_EXPORT zsock_t *
42 zsock_new_dealer (const char *endpoint);
43
44 // Create a ROUTER socket. Default action is bind.
45 CZMQ_EXPORT zsock_t *
46 zsock_new_router (const char *endpoint);
47
48 // Create a PUSH socket. Default action is connect.
49 CZMQ_EXPORT zsock_t *
50 zsock_new_push (const char *endpoint);
51
52 // Create a PULL socket. Default action is bind.
53 CZMQ_EXPORT zsock_t *
54 zsock_new_pull (const char *endpoint);
55
56 // Create an XPUB socket. Default action is bind.
57 CZMQ_EXPORT zsock_t *
58 zsock_new_xpub (const char *endpoint);
59
60 // Create an XSUB socket. Default action is connect.
61 CZMQ_EXPORT zsock_t *
62 zsock_new_xsub (const char *endpoint);
63
64 // Create a PAIR socket. Default action is connect.
65 CZMQ_EXPORT zsock_t *
66 zsock_new_pair (const char *endpoint);
67
68 // Create a STREAM socket. Default action is connect.
69 CZMQ_EXPORT zsock_t *
70 zsock_new_stream (const char *endpoint);
71
72 // Destroy the socket. You must use this for any socket created via the
73 // zsock_new method.
74 CZMQ_EXPORT void
75 zsock_destroy (zsock_t **self_p);
76
77 // Bind a socket to a formatted endpoint. For tcp:// endpoints, supports
78 // ephemeral ports, if you specify the port number as "*". By default
79 // zsock uses the IANA designated range from C000 (49152) to FFFF (65535).
80 // To override this range, follow the "*" with "[first-last]". Either or
81 // both first and last may be empty. To bind to a random port within the
82 // range, use "!" in place of "*".
83 //
84 // Examples:
85 // tcp://127.0.0.1:* bind to first free port from C000 up
86 // tcp://127.0.0.1:! bind to random port from C000 to FFFF
87 // tcp://127.0.0.1:*[60000-] bind to first free port from 60000 up
88 // tcp://127.0.0.1:![-60000] bind to random port from C000 to 60000
89 // tcp://127.0.0.1:![55000-55999]
90 // bind to random port from 55000 to 55999
91 //
92 // On success, returns the actual port number used, for tcp:// endpoints,
93 // and 0 for other transports. On failure, returns -1. Note that when using
94 // ephemeral ports, a port may be reused by different services without
95 // clients being aware. Protocols that run on ephemeral ports should take
96 // this into account.
97 CZMQ_EXPORT int
98 zsock_bind (zsock_t *self, const char *format, ...) CHECK_PRINTF (2);
99
100 // Returns last bound endpoint, if any.
101 CZMQ_EXPORT const char *
102 zsock_endpoint (zsock_t *self);
103
104 // Unbind a socket from a formatted endpoint.
105 // Returns 0 if OK, -1 if the endpoint was invalid or the function
106 // isn't supported.
107 CZMQ_EXPORT int
108 zsock_unbind (zsock_t *self, const char *format, ...) CHECK_PRINTF (2);
109
110 // Connect a socket to a formatted endpoint
111 // Returns 0 if OK, -1 if the endpoint was invalid.
112 CZMQ_EXPORT int
113 zsock_connect (zsock_t *self, const char *format, ...) CHECK_PRINTF (2);
114
115 // Disconnect a socket from a formatted endpoint
116 // Returns 0 if OK, -1 if the endpoint was invalid or the function
117 // isn't supported.
118 CZMQ_EXPORT int
119 zsock_disconnect (zsock_t *self, const char *format, ...) CHECK_PRINTF (2);
120
121 // Attach a socket to zero or more endpoints. If endpoints is not null,
122 // parses as list of ZeroMQ endpoints, separated by commas, and prefixed by
123 // '@' (to bind the socket) or '>' (to connect the socket). Returns 0 if all
124 // endpoints were valid, or -1 if there was a syntax error. If the endpoint
125 // does not start with '@' or '>', the serverish argument defines whether
126 // it is used to bind (serverish = true) or connect (serverish = false).
127 CZMQ_EXPORT int
128 zsock_attach (zsock_t *self, const char *endpoints, bool serverish);
129
130 // Returns socket type as printable constant string.
131 CZMQ_EXPORT const char *
132 zsock_type_str (zsock_t *self);
133
134 // Send a 'picture' message to the socket (or actor). The picture is a
135 // string that defines the type of each frame. This makes it easy to send
136 // a complex multiframe message in one call. The picture can contain any
137 // of these characters, each corresponding to one or two arguments:
138 //
139 // i = int (signed)
140 // 1 = uint8_t
141 // 2 = uint16_t
142 // 4 = uint32_t
143 // 8 = uint64_t
144 // s = char *
145 // b = byte *, size_t (2 arguments)
146 // c = zchunk_t *
147 // f = zframe_t *
148 // h = zhashx_t *
149 // l = zlistx_t * (DRAFT)
150 // U = zuuid_t *
151 // p = void * (sends the pointer value, only meaningful over inproc)
152 // m = zmsg_t * (sends all frames in the zmsg)
153 // z = sends zero-sized frame (0 arguments)
154 // u = uint (deprecated)
155 //
156 // Note that s, b, c, and f are encoded the same way and the choice is
157 // offered as a convenience to the sender, which may or may not already
158 // have data in a zchunk or zframe. Does not change or take ownership of
159 // any arguments. Returns 0 if successful, -1 if sending failed for any
160 // reason.
161 CZMQ_EXPORT int
162 zsock_send (void *self, const char *picture, ...);
163
164 // Send a 'picture' message to the socket (or actor). This is a va_list
165 // version of zsock_send (), so please consult its documentation for the
166 // details.
167 CZMQ_EXPORT int
168 zsock_vsend (void *self, const char *picture, va_list argptr);
169
170 // Receive a 'picture' message to the socket (or actor). See zsock_send for
171 // the format and meaning of the picture. Returns the picture elements into
172 // a series of pointers as provided by the caller:
173 //
174 // i = int * (stores signed integer)
175 // 4 = uint32_t * (stores 32-bit unsigned integer)
176 // 8 = uint64_t * (stores 64-bit unsigned integer)
177 // s = char ** (allocates new string)
178 // b = byte **, size_t * (2 arguments) (allocates memory)
179 // c = zchunk_t ** (creates zchunk)
180 // f = zframe_t ** (creates zframe)
181 // U = zuuid_t * (creates a zuuid with the data)
182 // h = zhashx_t ** (creates zhashx)
183 // l = zlistx_t ** (creates zlistx) (DRAFT)
184 // p = void ** (stores pointer)
185 // m = zmsg_t ** (creates a zmsg with the remaining frames)
186 // z = null, asserts empty frame (0 arguments)
187 // u = uint * (stores unsigned integer, deprecated)
188 //
189 // Note that zsock_recv creates the returned objects, and the caller must
190 // destroy them when finished with them. The supplied pointers do not need
191 // to be initialized. Returns 0 if successful, or -1 if it failed to recv
192 // a message, in which case the pointers are not modified. When message
193 // frames are truncated (a short message), sets return values to zero/null.
194 // If an argument pointer is NULL, does not store any value (skips it).
195 // An 'n' picture matches an empty frame; if the message does not match,
196 // the method will return -1.
197 CZMQ_EXPORT int
198 zsock_recv (void *self, const char *picture, ...);
199
200 // Receive a 'picture' message from the socket (or actor). This is a
201 // va_list version of zsock_recv (), so please consult its documentation
202 // for the details.
203 CZMQ_EXPORT int
204 zsock_vrecv (void *self, const char *picture, va_list argptr);
205
206 // Send a binary encoded 'picture' message to the socket (or actor). This
207 // method is similar to zsock_send, except the arguments are encoded in a
208 // binary format that is compatible with zproto, and is designed to reduce
209 // memory allocations. The pattern argument is a string that defines the
210 // type of each argument. Supports these argument types:
211 //
212 // pattern C type zproto type:
213 // 1 uint8_t type = "number" size = "1"
214 // 2 uint16_t type = "number" size = "2"
215 // 4 uint32_t type = "number" size = "3"
216 // 8 uint64_t type = "number" size = "4"
217 // s char *, 0-255 chars type = "string"
218 // S char *, 0-2^32-1 chars type = "longstr"
219 // c zchunk_t * type = "chunk"
220 // f zframe_t * type = "frame"
221 // u zuuid_t * type = "uuid"
222 // m zmsg_t * type = "msg"
223 // p void *, sends pointer value, only over inproc
224 //
225 // Does not change or take ownership of any arguments. Returns 0 if
226 // successful, -1 if sending failed for any reason.
227 CZMQ_EXPORT int
228 zsock_bsend (void *self, const char *picture, ...);
229
230 // Receive a binary encoded 'picture' message from the socket (or actor).
231 // This method is similar to zsock_recv, except the arguments are encoded
232 // in a binary format that is compatible with zproto, and is designed to
233 // reduce memory allocations. The pattern argument is a string that defines
234 // the type of each argument. See zsock_bsend for the supported argument
235 // types. All arguments must be pointers; this call sets them to point to
236 // values held on a per-socket basis.
237 // For types 1, 2, 4 and 8 the caller must allocate the memory itself before
238 // calling zsock_brecv.
239 // For types S, the caller must free the value once finished with it, as
240 // zsock_brecv will allocate the buffer.
241 // For type s, the caller must not free the value as it is stored in a
242 // local cache for performance purposes.
243 // For types c, f, u and m the caller must call the appropriate destructor
244 // depending on the object as zsock_brecv will create new objects.
245 // For type p the caller must coordinate with the sender, as it is just a
246 // pointer value being passed.
247 CZMQ_EXPORT int
248 zsock_brecv (void *self, const char *picture, ...);
249
250 // Set socket to use unbounded pipes (HWM=0); use this in cases when you are
251 // totally certain the message volume can fit in memory. This method works
252 // across all versions of ZeroMQ. Takes a polymorphic socket reference.
253 CZMQ_EXPORT void
254 zsock_set_unbounded (void *self);
255
256 // Send a signal over a socket. A signal is a short message carrying a
257 // success/failure code (by convention, 0 means OK). Signals are encoded
258 // to be distinguishable from "normal" messages. Accepts a zsock_t or a
259 // zactor_t argument, and returns 0 if successful, -1 if the signal could
260 // not be sent. Takes a polymorphic socket reference.
261 CZMQ_EXPORT int
262 zsock_signal (void *self, byte status);
263
264 // Wait on a signal. Use this to coordinate between threads, over pipe
265 // pairs. Blocks until the signal is received. Returns -1 on error, 0 or
266 // greater on success. Accepts a zsock_t or a zactor_t as argument.
267 // Takes a polymorphic socket reference.
268 CZMQ_EXPORT int
269 zsock_wait (void *self);
270
271 // If there is a partial message still waiting on the socket, remove and
272 // discard it. This is useful when reading partial messages, to get specific
273 // message types.
274 CZMQ_EXPORT void
275 zsock_flush (void *self);
276
277 // Probe the supplied object, and report if it looks like a zsock_t.
278 // Takes a polymorphic socket reference.
279 CZMQ_EXPORT bool
280 zsock_is (void *self);
281
282 // Probe the supplied reference. If it looks like a zsock_t instance, return
283 // the underlying libzmq socket handle; else if it looks like a file
284 // descriptor, return NULL; else if it looks like a libzmq socket handle,
285 // return the supplied value. Takes a polymorphic socket reference.
286 CZMQ_EXPORT void *
287 zsock_resolve (void *self);
288
289 // Get socket option `priority`.
290 // Available from libzmq 4.3.0.
291 // Caller owns return value and must destroy it when done.
292 CZMQ_EXPORT int
293 zsock_priority (void *self);
294
295 // Set socket option `priority`.
296 // Available from libzmq 4.3.0.
297 CZMQ_EXPORT void
298 zsock_set_priority (void *self, int priority);
299
300 // Get socket option `reconnect_stop`.
301 // Available from libzmq 4.3.0.
302 // Caller owns return value and must destroy it when done.
303 CZMQ_EXPORT int
304 zsock_reconnect_stop (void *self);
305
306 // Set socket option `reconnect_stop`.
307 // Available from libzmq 4.3.0.
308 CZMQ_EXPORT void
309 zsock_set_reconnect_stop (void *self, int reconnect_stop);
310
311 // Set socket option `only_first_subscribe`.
312 // Available from libzmq 4.3.0.
313 CZMQ_EXPORT void
314 zsock_set_only_first_subscribe (void *self, int only_first_subscribe);
315
316 // Set socket option `hello_msg`.
317 // Available from libzmq 4.3.0.
318 CZMQ_EXPORT void
319 zsock_set_hello_msg (void *self, zframe_t *hello_msg);
320
321 // Set socket option `disconnect_msg`.
322 // Available from libzmq 4.3.0.
323 CZMQ_EXPORT void
324 zsock_set_disconnect_msg (void *self, zframe_t *disconnect_msg);
325
326 // Set socket option `wss_trust_system`.
327 // Available from libzmq 4.3.0.
328 CZMQ_EXPORT void
329 zsock_set_wss_trust_system (void *self, int wss_trust_system);
330
331 // Set socket option `wss_hostname`.
332 // Available from libzmq 4.3.0.
333 CZMQ_EXPORT void
334 zsock_set_wss_hostname (void *self, const char *wss_hostname);
335
336 // Set socket option `wss_trust_pem`.
337 // Available from libzmq 4.3.0.
338 CZMQ_EXPORT void
339 zsock_set_wss_trust_pem (void *self, const char *wss_trust_pem);
340
341 // Set socket option `wss_cert_pem`.
342 // Available from libzmq 4.3.0.
343 CZMQ_EXPORT void
344 zsock_set_wss_cert_pem (void *self, const char *wss_cert_pem);
345
346 // Set socket option `wss_key_pem`.
347 // Available from libzmq 4.3.0.
348 CZMQ_EXPORT void
349 zsock_set_wss_key_pem (void *self, const char *wss_key_pem);
350
351 // Get socket option `out_batch_size`.
352 // Available from libzmq 4.3.0.
353 // Caller owns return value and must destroy it when done.
354 CZMQ_EXPORT int
355 zsock_out_batch_size (void *self);
356
357 // Set socket option `out_batch_size`.
358 // Available from libzmq 4.3.0.
359 CZMQ_EXPORT void
360 zsock_set_out_batch_size (void *self, int out_batch_size);
361
362 // Get socket option `in_batch_size`.
363 // Available from libzmq 4.3.0.
364 // Caller owns return value and must destroy it when done.
365 CZMQ_EXPORT int
366 zsock_in_batch_size (void *self);
367
368 // Set socket option `in_batch_size`.
369 // Available from libzmq 4.3.0.
370 CZMQ_EXPORT void
371 zsock_set_in_batch_size (void *self, int in_batch_size);
372
373 // Get socket option `socks_password`.
374 // Available from libzmq 4.3.0.
375 // Caller owns return value and must destroy it when done.
376 CZMQ_EXPORT char *
377 zsock_socks_password (void *self);
378
379 // Set socket option `socks_password`.
380 // Available from libzmq 4.3.0.
381 CZMQ_EXPORT void
382 zsock_set_socks_password (void *self, const char *socks_password);
383
384 // Get socket option `socks_username`.
385 // Available from libzmq 4.3.0.
386 // Caller owns return value and must destroy it when done.
387 CZMQ_EXPORT char *
388 zsock_socks_username (void *self);
389
390 // Set socket option `socks_username`.
391 // Available from libzmq 4.3.0.
392 CZMQ_EXPORT void
393 zsock_set_socks_username (void *self, const char *socks_username);
394
395 // Set socket option `xpub_manual_last_value`.
396 // Available from libzmq 4.3.0.
397 CZMQ_EXPORT void
398 zsock_set_xpub_manual_last_value (void *self, int xpub_manual_last_value);
399
400 // Get socket option `router_notify`.
401 // Available from libzmq 4.3.0.
402 // Caller owns return value and must destroy it when done.
403 CZMQ_EXPORT int
404 zsock_router_notify (void *self);
405
406 // Set socket option `router_notify`.
407 // Available from libzmq 4.3.0.
408 CZMQ_EXPORT void
409 zsock_set_router_notify (void *self, int router_notify);
410
411 // Get socket option `multicast_loop`.
412 // Available from libzmq 4.3.0.
413 // Caller owns return value and must destroy it when done.
414 CZMQ_EXPORT int
415 zsock_multicast_loop (void *self);
416
417 // Set socket option `multicast_loop`.
418 // Available from libzmq 4.3.0.
419 CZMQ_EXPORT void
420 zsock_set_multicast_loop (void *self, int multicast_loop);
421
422 // Get socket option `metadata`.
423 // Available from libzmq 4.3.0.
424 // Caller owns return value and must destroy it when done.
425 CZMQ_EXPORT char *
426 zsock_metadata (void *self);
427
428 // Set socket option `metadata`.
429 // Available from libzmq 4.3.0.
430 CZMQ_EXPORT void
431 zsock_set_metadata (void *self, const char *metadata);
432
433 // Get socket option `loopback_fastpath`.
434 // Available from libzmq 4.3.0.
435 // Caller owns return value and must destroy it when done.
436 CZMQ_EXPORT int
437 zsock_loopback_fastpath (void *self);
438
439 // Set socket option `loopback_fastpath`.
440 // Available from libzmq 4.3.0.
441 CZMQ_EXPORT void
442 zsock_set_loopback_fastpath (void *self, int loopback_fastpath);
443
444 // Get socket option `zap_enforce_domain`.
445 // Available from libzmq 4.3.0.
446 // Caller owns return value and must destroy it when done.
447 CZMQ_EXPORT int
448 zsock_zap_enforce_domain (void *self);
449
450 // Set socket option `zap_enforce_domain`.
451 // Available from libzmq 4.3.0.
452 CZMQ_EXPORT void
453 zsock_set_zap_enforce_domain (void *self, int zap_enforce_domain);
454
455 // Get socket option `gssapi_principal_nametype`.
456 // Available from libzmq 4.3.0.
457 // Caller owns return value and must destroy it when done.
458 CZMQ_EXPORT int
459 zsock_gssapi_principal_nametype (void *self);
460
461 // Set socket option `gssapi_principal_nametype`.
462 // Available from libzmq 4.3.0.
463 CZMQ_EXPORT void
464 zsock_set_gssapi_principal_nametype (void *self, int gssapi_principal_nametype);
465
466 // Get socket option `gssapi_service_principal_nametype`.
467 // Available from libzmq 4.3.0.
468 // Caller owns return value and must destroy it when done.
469 CZMQ_EXPORT int
470 zsock_gssapi_service_principal_nametype (void *self);
471
472 // Set socket option `gssapi_service_principal_nametype`.
473 // Available from libzmq 4.3.0.
474 CZMQ_EXPORT void
475 zsock_set_gssapi_service_principal_nametype (void *self, int gssapi_service_principal_nametype);
476
477 // Get socket option `bindtodevice`.
478 // Available from libzmq 4.3.0.
479 // Caller owns return value and must destroy it when done.
480 CZMQ_EXPORT char *
481 zsock_bindtodevice (void *self);
482
483 // Set socket option `bindtodevice`.
484 // Available from libzmq 4.3.0.
485 CZMQ_EXPORT void
486 zsock_set_bindtodevice (void *self, const char *bindtodevice);
487
488 // Get socket option `heartbeat_ivl`.
489 // Available from libzmq 4.2.0.
490 // Caller owns return value and must destroy it when done.
491 CZMQ_EXPORT int
492 zsock_heartbeat_ivl (void *self);
493
494 // Set socket option `heartbeat_ivl`.
495 // Available from libzmq 4.2.0.
496 CZMQ_EXPORT void
497 zsock_set_heartbeat_ivl (void *self, int heartbeat_ivl);
498
499 // Get socket option `heartbeat_ttl`.
500 // Available from libzmq 4.2.0.
501 // Caller owns return value and must destroy it when done.
502 CZMQ_EXPORT int
503 zsock_heartbeat_ttl (void *self);
504
505 // Set socket option `heartbeat_ttl`.
506 // Available from libzmq 4.2.0.
507 CZMQ_EXPORT void
508 zsock_set_heartbeat_ttl (void *self, int heartbeat_ttl);
509
510 // Get socket option `heartbeat_timeout`.
511 // Available from libzmq 4.2.0.
512 // Caller owns return value and must destroy it when done.
513 CZMQ_EXPORT int
514 zsock_heartbeat_timeout (void *self);
515
516 // Set socket option `heartbeat_timeout`.
517 // Available from libzmq 4.2.0.
518 CZMQ_EXPORT void
519 zsock_set_heartbeat_timeout (void *self, int heartbeat_timeout);
520
521 // Get socket option `use_fd`.
522 // Available from libzmq 4.2.0.
523 // Caller owns return value and must destroy it when done.
524 CZMQ_EXPORT int
525 zsock_use_fd (void *self);
526
527 // Set socket option `use_fd`.
528 // Available from libzmq 4.2.0.
529 CZMQ_EXPORT void
530 zsock_set_use_fd (void *self, int use_fd);
531
532 // Set socket option `xpub_manual`.
533 // Available from libzmq 4.2.0.
534 CZMQ_EXPORT void
535 zsock_set_xpub_manual (void *self, int xpub_manual);
536
537 // Set socket option `xpub_welcome_msg`.
538 // Available from libzmq 4.2.0.
539 CZMQ_EXPORT void
540 zsock_set_xpub_welcome_msg (void *self, const char *xpub_welcome_msg);
541
542 // Set socket option `stream_notify`.
543 // Available from libzmq 4.2.0.
544 CZMQ_EXPORT void
545 zsock_set_stream_notify (void *self, int stream_notify);
546
547 // Get socket option `invert_matching`.
548 // Available from libzmq 4.2.0.
549 // Caller owns return value and must destroy it when done.
550 CZMQ_EXPORT int
551 zsock_invert_matching (void *self);
552
553 // Set socket option `invert_matching`.
554 // Available from libzmq 4.2.0.
555 CZMQ_EXPORT void
556 zsock_set_invert_matching (void *self, int invert_matching);
557
558 // Set socket option `xpub_verboser`.
559 // Available from libzmq 4.2.0.
560 CZMQ_EXPORT void
561 zsock_set_xpub_verboser (void *self, int xpub_verboser);
562
563 // Get socket option `connect_timeout`.
564 // Available from libzmq 4.2.0.
565 // Caller owns return value and must destroy it when done.
566 CZMQ_EXPORT int
567 zsock_connect_timeout (void *self);
568
569 // Set socket option `connect_timeout`.
570 // Available from libzmq 4.2.0.
571 CZMQ_EXPORT void
572 zsock_set_connect_timeout (void *self, int connect_timeout);
573
574 // Get socket option `tcp_maxrt`.
575 // Available from libzmq 4.2.0.
576 // Caller owns return value and must destroy it when done.
577 CZMQ_EXPORT int
578 zsock_tcp_maxrt (void *self);
579
580 // Set socket option `tcp_maxrt`.
581 // Available from libzmq 4.2.0.
582 CZMQ_EXPORT void
583 zsock_set_tcp_maxrt (void *self, int tcp_maxrt);
584
585 // Get socket option `thread_safe`.
586 // Available from libzmq 4.2.0.
587 // Caller owns return value and must destroy it when done.
588 CZMQ_EXPORT int
589 zsock_thread_safe (void *self);
590
591 // Get socket option `multicast_maxtpdu`.
592 // Available from libzmq 4.2.0.
593 // Caller owns return value and must destroy it when done.
594 CZMQ_EXPORT int
595 zsock_multicast_maxtpdu (void *self);
596
597 // Set socket option `multicast_maxtpdu`.
598 // Available from libzmq 4.2.0.
599 CZMQ_EXPORT void
600 zsock_set_multicast_maxtpdu (void *self, int multicast_maxtpdu);
601
602 // Get socket option `vmci_buffer_size`.
603 // Available from libzmq 4.2.0.
604 // Caller owns return value and must destroy it when done.
605 CZMQ_EXPORT int
606 zsock_vmci_buffer_size (void *self);
607
608 // Set socket option `vmci_buffer_size`.
609 // Available from libzmq 4.2.0.
610 CZMQ_EXPORT void
611 zsock_set_vmci_buffer_size (void *self, int vmci_buffer_size);
612
613 // Get socket option `vmci_buffer_min_size`.
614 // Available from libzmq 4.2.0.
615 // Caller owns return value and must destroy it when done.
616 CZMQ_EXPORT int
617 zsock_vmci_buffer_min_size (void *self);
618
619 // Set socket option `vmci_buffer_min_size`.
620 // Available from libzmq 4.2.0.
621 CZMQ_EXPORT void
622 zsock_set_vmci_buffer_min_size (void *self, int vmci_buffer_min_size);
623
624 // Get socket option `vmci_buffer_max_size`.
625 // Available from libzmq 4.2.0.
626 // Caller owns return value and must destroy it when done.
627 CZMQ_EXPORT int
628 zsock_vmci_buffer_max_size (void *self);
629
630 // Set socket option `vmci_buffer_max_size`.
631 // Available from libzmq 4.2.0.
632 CZMQ_EXPORT void
633 zsock_set_vmci_buffer_max_size (void *self, int vmci_buffer_max_size);
634
635 // Get socket option `vmci_connect_timeout`.
636 // Available from libzmq 4.2.0.
637 // Caller owns return value and must destroy it when done.
638 CZMQ_EXPORT int
639 zsock_vmci_connect_timeout (void *self);
640
641 // Set socket option `vmci_connect_timeout`.
642 // Available from libzmq 4.2.0.
643 CZMQ_EXPORT void
644 zsock_set_vmci_connect_timeout (void *self, int vmci_connect_timeout);
645
646 // Get socket option `tos`.
647 // Available from libzmq 4.1.0.
648 // Caller owns return value and must destroy it when done.
649 CZMQ_EXPORT int
650 zsock_tos (void *self);
651
652 // Set socket option `tos`.
653 // Available from libzmq 4.1.0.
654 CZMQ_EXPORT void
655 zsock_set_tos (void *self, int tos);
656
657 // Set socket option `router_handover`.
658 // Available from libzmq 4.1.0.
659 CZMQ_EXPORT void
660 zsock_set_router_handover (void *self, int router_handover);
661
662 // Set socket option `connect_rid`.
663 // Available from libzmq 4.1.0.
664 CZMQ_EXPORT void
665 zsock_set_connect_rid (void *self, const char *connect_rid);
666
667 // Set socket option `connect_rid` from 32-octet binary
668 // Available from libzmq 4.1.0.
669 CZMQ_EXPORT void
670 zsock_set_connect_rid_bin (void *self, const byte *connect_rid);
671
672 // Get socket option `handshake_ivl`.
673 // Available from libzmq 4.1.0.
674 // Caller owns return value and must destroy it when done.
675 CZMQ_EXPORT int
676 zsock_handshake_ivl (void *self);
677
678 // Set socket option `handshake_ivl`.
679 // Available from libzmq 4.1.0.
680 CZMQ_EXPORT void
681 zsock_set_handshake_ivl (void *self, int handshake_ivl);
682
683 // Get socket option `socks_proxy`.
684 // Available from libzmq 4.1.0.
685 // Caller owns return value and must destroy it when done.
686 CZMQ_EXPORT char *
687 zsock_socks_proxy (void *self);
688
689 // Set socket option `socks_proxy`.
690 // Available from libzmq 4.1.0.
691 CZMQ_EXPORT void
692 zsock_set_socks_proxy (void *self, const char *socks_proxy);
693
694 // Set socket option `xpub_nodrop`.
695 // Available from libzmq 4.1.0.
696 CZMQ_EXPORT void
697 zsock_set_xpub_nodrop (void *self, int xpub_nodrop);
698
699 // Set socket option `router_mandatory`.
700 // Available from libzmq 4.0.0.
701 CZMQ_EXPORT void
702 zsock_set_router_mandatory (void *self, int router_mandatory);
703
704 // Set socket option `probe_router`.
705 // Available from libzmq 4.0.0.
706 CZMQ_EXPORT void
707 zsock_set_probe_router (void *self, int probe_router);
708
709 // Set socket option `req_relaxed`.
710 // Available from libzmq 4.0.0.
711 CZMQ_EXPORT void
712 zsock_set_req_relaxed (void *self, int req_relaxed);
713
714 // Set socket option `req_correlate`.
715 // Available from libzmq 4.0.0.
716 CZMQ_EXPORT void
717 zsock_set_req_correlate (void *self, int req_correlate);
718
719 // Set socket option `conflate`.
720 // Available from libzmq 4.0.0.
721 CZMQ_EXPORT void
722 zsock_set_conflate (void *self, int conflate);
723
724 // Get socket option `zap_domain`.
725 // Available from libzmq 4.0.0.
726 // Caller owns return value and must destroy it when done.
727 CZMQ_EXPORT char *
728 zsock_zap_domain (void *self);
729
730 // Set socket option `zap_domain`.
731 // Available from libzmq 4.0.0.
732 CZMQ_EXPORT void
733 zsock_set_zap_domain (void *self, const char *zap_domain);
734
735 // Get socket option `mechanism`.
736 // Available from libzmq 4.0.0.
737 // Caller owns return value and must destroy it when done.
738 CZMQ_EXPORT int
739 zsock_mechanism (void *self);
740
741 // Get socket option `plain_server`.
742 // Available from libzmq 4.0.0.
743 // Caller owns return value and must destroy it when done.
744 CZMQ_EXPORT int
745 zsock_plain_server (void *self);
746
747 // Set socket option `plain_server`.
748 // Available from libzmq 4.0.0.
749 CZMQ_EXPORT void
750 zsock_set_plain_server (void *self, int plain_server);
751
752 // Get socket option `plain_username`.
753 // Available from libzmq 4.0.0.
754 // Caller owns return value and must destroy it when done.
755 CZMQ_EXPORT char *
756 zsock_plain_username (void *self);
757
758 // Set socket option `plain_username`.
759 // Available from libzmq 4.0.0.
760 CZMQ_EXPORT void
761 zsock_set_plain_username (void *self, const char *plain_username);
762
763 // Get socket option `plain_password`.
764 // Available from libzmq 4.0.0.
765 // Caller owns return value and must destroy it when done.
766 CZMQ_EXPORT char *
767 zsock_plain_password (void *self);
768
769 // Set socket option `plain_password`.
770 // Available from libzmq 4.0.0.
771 CZMQ_EXPORT void
772 zsock_set_plain_password (void *self, const char *plain_password);
773
774 // Get socket option `curve_server`.
775 // Available from libzmq 4.0.0.
776 // Caller owns return value and must destroy it when done.
777 CZMQ_EXPORT int
778 zsock_curve_server (void *self);
779
780 // Set socket option `curve_server`.
781 // Available from libzmq 4.0.0.
782 CZMQ_EXPORT void
783 zsock_set_curve_server (void *self, int curve_server);
784
785 // Get socket option `curve_publickey`.
786 // Available from libzmq 4.0.0.
787 // Caller owns return value and must destroy it when done.
788 CZMQ_EXPORT char *
789 zsock_curve_publickey (void *self);
790
791 // Set socket option `curve_publickey`.
792 // Available from libzmq 4.0.0.
793 CZMQ_EXPORT void
794 zsock_set_curve_publickey (void *self, const char *curve_publickey);
795
796 // Set socket option `curve_publickey` from 32-octet binary
797 // Available from libzmq 4.0.0.
798 CZMQ_EXPORT void
799 zsock_set_curve_publickey_bin (void *self, const byte *curve_publickey);
800
801 // Get socket option `curve_secretkey`.
802 // Available from libzmq 4.0.0.
803 // Caller owns return value and must destroy it when done.
804 CZMQ_EXPORT char *
805 zsock_curve_secretkey (void *self);
806
807 // Set socket option `curve_secretkey`.
808 // Available from libzmq 4.0.0.
809 CZMQ_EXPORT void
810 zsock_set_curve_secretkey (void *self, const char *curve_secretkey);
811
812 // Set socket option `curve_secretkey` from 32-octet binary
813 // Available from libzmq 4.0.0.
814 CZMQ_EXPORT void
815 zsock_set_curve_secretkey_bin (void *self, const byte *curve_secretkey);
816
817 // Get socket option `curve_serverkey`.
818 // Available from libzmq 4.0.0.
819 // Caller owns return value and must destroy it when done.
820 CZMQ_EXPORT char *
821 zsock_curve_serverkey (void *self);
822
823 // Set socket option `curve_serverkey`.
824 // Available from libzmq 4.0.0.
825 CZMQ_EXPORT void
826 zsock_set_curve_serverkey (void *self, const char *curve_serverkey);
827
828 // Set socket option `curve_serverkey` from 32-octet binary
829 // Available from libzmq 4.0.0.
830 CZMQ_EXPORT void
831 zsock_set_curve_serverkey_bin (void *self, const byte *curve_serverkey);
832
833 // Get socket option `gssapi_server`.
834 // Available from libzmq 4.0.0.
835 // Caller owns return value and must destroy it when done.
836 CZMQ_EXPORT int
837 zsock_gssapi_server (void *self);
838
839 // Set socket option `gssapi_server`.
840 // Available from libzmq 4.0.0.
841 CZMQ_EXPORT void
842 zsock_set_gssapi_server (void *self, int gssapi_server);
843
844 // Get socket option `gssapi_plaintext`.
845 // Available from libzmq 4.0.0.
846 // Caller owns return value and must destroy it when done.
847 CZMQ_EXPORT int
848 zsock_gssapi_plaintext (void *self);
849
850 // Set socket option `gssapi_plaintext`.
851 // Available from libzmq 4.0.0.
852 CZMQ_EXPORT void
853 zsock_set_gssapi_plaintext (void *self, int gssapi_plaintext);
854
855 // Get socket option `gssapi_principal`.
856 // Available from libzmq 4.0.0.
857 // Caller owns return value and must destroy it when done.
858 CZMQ_EXPORT char *
859 zsock_gssapi_principal (void *self);
860
861 // Set socket option `gssapi_principal`.
862 // Available from libzmq 4.0.0.
863 CZMQ_EXPORT void
864 zsock_set_gssapi_principal (void *self, const char *gssapi_principal);
865
866 // Get socket option `gssapi_service_principal`.
867 // Available from libzmq 4.0.0.
868 // Caller owns return value and must destroy it when done.
869 CZMQ_EXPORT char *
870 zsock_gssapi_service_principal (void *self);
871
872 // Set socket option `gssapi_service_principal`.
873 // Available from libzmq 4.0.0.
874 CZMQ_EXPORT void
875 zsock_set_gssapi_service_principal (void *self, const char *gssapi_service_principal);
876
877 // Get socket option `ipv6`.
878 // Available from libzmq 4.0.0.
879 // Caller owns return value and must destroy it when done.
880 CZMQ_EXPORT int
881 zsock_ipv6 (void *self);
882
883 // Set socket option `ipv6`.
884 // Available from libzmq 4.0.0.
885 CZMQ_EXPORT void
886 zsock_set_ipv6 (void *self, int ipv6);
887
888 // Get socket option `immediate`.
889 // Available from libzmq 4.0.0.
890 // Caller owns return value and must destroy it when done.
891 CZMQ_EXPORT int
892 zsock_immediate (void *self);
893
894 // Set socket option `immediate`.
895 // Available from libzmq 4.0.0.
896 CZMQ_EXPORT void
897 zsock_set_immediate (void *self, int immediate);
898
899 // Get socket option `sndhwm`.
900 // Available from libzmq 3.0.0.
901 // Caller owns return value and must destroy it when done.
902 CZMQ_EXPORT int
903 zsock_sndhwm (void *self);
904
905 // Set socket option `sndhwm`.
906 // Available from libzmq 3.0.0.
907 CZMQ_EXPORT void
908 zsock_set_sndhwm (void *self, int sndhwm);
909
910 // Get socket option `rcvhwm`.
911 // Available from libzmq 3.0.0.
912 // Caller owns return value and must destroy it when done.
913 CZMQ_EXPORT int
914 zsock_rcvhwm (void *self);
915
916 // Set socket option `rcvhwm`.
917 // Available from libzmq 3.0.0.
918 CZMQ_EXPORT void
919 zsock_set_rcvhwm (void *self, int rcvhwm);
920
921 // Get socket option `maxmsgsize`.
922 // Available from libzmq 3.0.0.
923 // Caller owns return value and must destroy it when done.
924 CZMQ_EXPORT int
925 zsock_maxmsgsize (void *self);
926
927 // Set socket option `maxmsgsize`.
928 // Available from libzmq 3.0.0.
929 CZMQ_EXPORT void
930 zsock_set_maxmsgsize (void *self, int maxmsgsize);
931
932 // Get socket option `multicast_hops`.
933 // Available from libzmq 3.0.0.
934 // Caller owns return value and must destroy it when done.
935 CZMQ_EXPORT int
936 zsock_multicast_hops (void *self);
937
938 // Set socket option `multicast_hops`.
939 // Available from libzmq 3.0.0.
940 CZMQ_EXPORT void
941 zsock_set_multicast_hops (void *self, int multicast_hops);
942
943 // Set socket option `xpub_verbose`.
944 // Available from libzmq 3.0.0.
945 CZMQ_EXPORT void
946 zsock_set_xpub_verbose (void *self, int xpub_verbose);
947
948 // Get socket option `tcp_keepalive`.
949 // Available from libzmq 3.0.0.
950 // Caller owns return value and must destroy it when done.
951 CZMQ_EXPORT int
952 zsock_tcp_keepalive (void *self);
953
954 // Set socket option `tcp_keepalive`.
955 // Available from libzmq 3.0.0.
956 CZMQ_EXPORT void
957 zsock_set_tcp_keepalive (void *self, int tcp_keepalive);
958
959 // Get socket option `tcp_keepalive_idle`.
960 // Available from libzmq 3.0.0.
961 // Caller owns return value and must destroy it when done.
962 CZMQ_EXPORT int
963 zsock_tcp_keepalive_idle (void *self);
964
965 // Set socket option `tcp_keepalive_idle`.
966 // Available from libzmq 3.0.0.
967 CZMQ_EXPORT void
968 zsock_set_tcp_keepalive_idle (void *self, int tcp_keepalive_idle);
969
970 // Get socket option `tcp_keepalive_cnt`.
971 // Available from libzmq 3.0.0.
972 // Caller owns return value and must destroy it when done.
973 CZMQ_EXPORT int
974 zsock_tcp_keepalive_cnt (void *self);
975
976 // Set socket option `tcp_keepalive_cnt`.
977 // Available from libzmq 3.0.0.
978 CZMQ_EXPORT void
979 zsock_set_tcp_keepalive_cnt (void *self, int tcp_keepalive_cnt);
980
981 // Get socket option `tcp_keepalive_intvl`.
982 // Available from libzmq 3.0.0.
983 // Caller owns return value and must destroy it when done.
984 CZMQ_EXPORT int
985 zsock_tcp_keepalive_intvl (void *self);
986
987 // Set socket option `tcp_keepalive_intvl`.
988 // Available from libzmq 3.0.0.
989 CZMQ_EXPORT void
990 zsock_set_tcp_keepalive_intvl (void *self, int tcp_keepalive_intvl);
991
992 // Get socket option `tcp_accept_filter`.
993 // Available from libzmq 3.0.0.
994 // Caller owns return value and must destroy it when done.
995 CZMQ_EXPORT char *
996 zsock_tcp_accept_filter (void *self);
997
998 // Set socket option `tcp_accept_filter`.
999 // Available from libzmq 3.0.0.
1000 CZMQ_EXPORT void
1001 zsock_set_tcp_accept_filter (void *self, const char *tcp_accept_filter);
1002
1003 // Get socket option `last_endpoint`.
1004 // Available from libzmq 3.0.0.
1005 // Caller owns return value and must destroy it when done.
1006 CZMQ_EXPORT char *
1007 zsock_last_endpoint (void *self);
1008
1009 // Set socket option `router_raw`.
1010 // Available from libzmq 3.0.0.
1011 CZMQ_EXPORT void
1012 zsock_set_router_raw (void *self, int router_raw);
1013
1014 // Get socket option `ipv4only`.
1015 // Available from libzmq 3.0.0.
1016 // Caller owns return value and must destroy it when done.
1017 CZMQ_EXPORT int
1018 zsock_ipv4only (void *self);
1019
1020 // Set socket option `ipv4only`.
1021 // Available from libzmq 3.0.0.
1022 CZMQ_EXPORT void
1023 zsock_set_ipv4only (void *self, int ipv4only);
1024
1025 // Set socket option `delay_attach_on_connect`.
1026 // Available from libzmq 3.0.0.
1027 CZMQ_EXPORT void
1028 zsock_set_delay_attach_on_connect (void *self, int delay_attach_on_connect);
1029
1030 // Get socket option `hwm`.
1031 // Available from libzmq 2.0.0 to 3.0.0.
1032 // Caller owns return value and must destroy it when done.
1033 CZMQ_EXPORT int
1034 zsock_hwm (void *self);
1035
1036 // Set socket option `hwm`.
1037 // Available from libzmq 2.0.0 to 3.0.0.
1038 CZMQ_EXPORT void
1039 zsock_set_hwm (void *self, int hwm);
1040
1041 // Get socket option `swap`.
1042 // Available from libzmq 2.0.0 to 3.0.0.
1043 // Caller owns return value and must destroy it when done.
1044 CZMQ_EXPORT int
1045 zsock_swap (void *self);
1046
1047 // Set socket option `swap`.
1048 // Available from libzmq 2.0.0 to 3.0.0.
1049 CZMQ_EXPORT void
1050 zsock_set_swap (void *self, int swap);
1051
1052 // Get socket option `affinity`.
1053 // Available from libzmq 2.0.0.
1054 // Caller owns return value and must destroy it when done.
1055 CZMQ_EXPORT int
1056 zsock_affinity (void *self);
1057
1058 // Set socket option `affinity`.
1059 // Available from libzmq 2.0.0.
1060 CZMQ_EXPORT void
1061 zsock_set_affinity (void *self, int affinity);
1062
1063 // Get socket option `identity`.
1064 // Available from libzmq 2.0.0.
1065 // Caller owns return value and must destroy it when done.
1066 CZMQ_EXPORT char *
1067 zsock_identity (void *self);
1068
1069 // Set socket option `identity`.
1070 // Available from libzmq 2.0.0.
1071 CZMQ_EXPORT void
1072 zsock_set_identity (void *self, const char *identity);
1073
1074 // Get socket option `rate`.
1075 // Available from libzmq 2.0.0.
1076 // Caller owns return value and must destroy it when done.
1077 CZMQ_EXPORT int
1078 zsock_rate (void *self);
1079
1080 // Set socket option `rate`.
1081 // Available from libzmq 2.0.0.
1082 CZMQ_EXPORT void
1083 zsock_set_rate (void *self, int rate);
1084
1085 // Get socket option `recovery_ivl`.
1086 // Available from libzmq 2.0.0.
1087 // Caller owns return value and must destroy it when done.
1088 CZMQ_EXPORT int
1089 zsock_recovery_ivl (void *self);
1090
1091 // Set socket option `recovery_ivl`.
1092 // Available from libzmq 2.0.0.
1093 CZMQ_EXPORT void
1094 zsock_set_recovery_ivl (void *self, int recovery_ivl);
1095
1096 // Get socket option `recovery_ivl_msec`.
1097 // Available from libzmq 2.0.0 to 3.0.0.
1098 // Caller owns return value and must destroy it when done.
1099 CZMQ_EXPORT int
1100 zsock_recovery_ivl_msec (void *self);
1101
1102 // Set socket option `recovery_ivl_msec`.
1103 // Available from libzmq 2.0.0 to 3.0.0.
1104 CZMQ_EXPORT void
1105 zsock_set_recovery_ivl_msec (void *self, int recovery_ivl_msec);
1106
1107 // Get socket option `mcast_loop`.
1108 // Available from libzmq 2.0.0 to 3.0.0.
1109 // Caller owns return value and must destroy it when done.
1110 CZMQ_EXPORT int
1111 zsock_mcast_loop (void *self);
1112
1113 // Set socket option `mcast_loop`.
1114 // Available from libzmq 2.0.0 to 3.0.0.
1115 CZMQ_EXPORT void
1116 zsock_set_mcast_loop (void *self, int mcast_loop);
1117
1118 // Get socket option `rcvtimeo`.
1119 // Available from libzmq 2.2.0.
1120 // Caller owns return value and must destroy it when done.
1121 CZMQ_EXPORT int
1122 zsock_rcvtimeo (void *self);
1123
1124 // Set socket option `rcvtimeo`.
1125 // Available from libzmq 2.2.0.
1126 CZMQ_EXPORT void
1127 zsock_set_rcvtimeo (void *self, int rcvtimeo);
1128
1129 // Get socket option `sndtimeo`.
1130 // Available from libzmq 2.2.0.
1131 // Caller owns return value and must destroy it when done.
1132 CZMQ_EXPORT int
1133 zsock_sndtimeo (void *self);
1134
1135 // Set socket option `sndtimeo`.
1136 // Available from libzmq 2.2.0.
1137 CZMQ_EXPORT void
1138 zsock_set_sndtimeo (void *self, int sndtimeo);
1139
1140 // Get socket option `sndbuf`.
1141 // Available from libzmq 2.0.0.
1142 // Caller owns return value and must destroy it when done.
1143 CZMQ_EXPORT int
1144 zsock_sndbuf (void *self);
1145
1146 // Set socket option `sndbuf`.
1147 // Available from libzmq 2.0.0.
1148 CZMQ_EXPORT void
1149 zsock_set_sndbuf (void *self, int sndbuf);
1150
1151 // Get socket option `rcvbuf`.
1152 // Available from libzmq 2.0.0.
1153 // Caller owns return value and must destroy it when done.
1154 CZMQ_EXPORT int
1155 zsock_rcvbuf (void *self);
1156
1157 // Set socket option `rcvbuf`.
1158 // Available from libzmq 2.0.0.
1159 CZMQ_EXPORT void
1160 zsock_set_rcvbuf (void *self, int rcvbuf);
1161
1162 // Get socket option `linger`.
1163 // Available from libzmq 2.0.0.
1164 // Caller owns return value and must destroy it when done.
1165 CZMQ_EXPORT int
1166 zsock_linger (void *self);
1167
1168 // Set socket option `linger`.
1169 // Available from libzmq 2.0.0.
1170 CZMQ_EXPORT void
1171 zsock_set_linger (void *self, int linger);
1172
1173 // Get socket option `reconnect_ivl`.
1174 // Available from libzmq 2.0.0.
1175 // Caller owns return value and must destroy it when done.
1176 CZMQ_EXPORT int
1177 zsock_reconnect_ivl (void *self);
1178
1179 // Set socket option `reconnect_ivl`.
1180 // Available from libzmq 2.0.0.
1181 CZMQ_EXPORT void
1182 zsock_set_reconnect_ivl (void *self, int reconnect_ivl);
1183
1184 // Get socket option `reconnect_ivl_max`.
1185 // Available from libzmq 2.0.0.
1186 // Caller owns return value and must destroy it when done.
1187 CZMQ_EXPORT int
1188 zsock_reconnect_ivl_max (void *self);
1189
1190 // Set socket option `reconnect_ivl_max`.
1191 // Available from libzmq 2.0.0.
1192 CZMQ_EXPORT void
1193 zsock_set_reconnect_ivl_max (void *self, int reconnect_ivl_max);
1194
1195 // Get socket option `backlog`.
1196 // Available from libzmq 2.0.0.
1197 // Caller owns return value and must destroy it when done.
1198 CZMQ_EXPORT int
1199 zsock_backlog (void *self);
1200
1201 // Set socket option `backlog`.
1202 // Available from libzmq 2.0.0.
1203 CZMQ_EXPORT void
1204 zsock_set_backlog (void *self, int backlog);
1205
1206 // Set socket option `subscribe`.
1207 // Available from libzmq 2.0.0.
1208 CZMQ_EXPORT void
1209 zsock_set_subscribe (void *self, const char *subscribe);
1210
1211 // Set socket option `unsubscribe`.
1212 // Available from libzmq 2.0.0.
1213 CZMQ_EXPORT void
1214 zsock_set_unsubscribe (void *self, const char *unsubscribe);
1215
1216 // Get socket option `type`.
1217 // Available from libzmq 2.0.0.
1218 // Caller owns return value and must destroy it when done.
1219 CZMQ_EXPORT int
1220 zsock_type (void *self);
1221
1222 // Get socket option `rcvmore`.
1223 // Available from libzmq 2.0.0.
1224 // Caller owns return value and must destroy it when done.
1225 CZMQ_EXPORT int
1226 zsock_rcvmore (void *self);
1227
1228 // Get socket option `fd`.
1229 // Available from libzmq 2.0.0.
1230 // Caller owns return value and must destroy it when done.
1231 CZMQ_EXPORT SOCKET
1232 zsock_fd (void *self);
1233
1234 // Get socket option `events`.
1235 // Available from libzmq 2.0.0.
1236 // Caller owns return value and must destroy it when done.
1237 CZMQ_EXPORT int
1238 zsock_events (void *self);
1239
1240 // Self test of this class.
1241 CZMQ_EXPORT void
1242 zsock_test (bool verbose);
1243
1244 #ifdef CZMQ_BUILD_DRAFT_API
1245 // *** Draft method, for development use, may change without warning ***
1246 // Create a SERVER socket. Default action is bind.
1247 CZMQ_EXPORT zsock_t *
1248 zsock_new_server (const char *endpoint);
1249
1250 // *** Draft method, for development use, may change without warning ***
1251 // Create a CLIENT socket. Default action is connect.
1252 CZMQ_EXPORT zsock_t *
1253 zsock_new_client (const char *endpoint);
1254
1255 // *** Draft method, for development use, may change without warning ***
1256 // Create a RADIO socket. Default action is bind.
1257 CZMQ_EXPORT zsock_t *
1258 zsock_new_radio (const char *endpoint);
1259
1260 // *** Draft method, for development use, may change without warning ***
1261 // Create a DISH socket. Default action is connect.
1262 CZMQ_EXPORT zsock_t *
1263 zsock_new_dish (const char *endpoint);
1264
1265 // *** Draft method, for development use, may change without warning ***
1266 // Create a GATHER socket. Default action is bind.
1267 CZMQ_EXPORT zsock_t *
1268 zsock_new_gather (const char *endpoint);
1269
1270 // *** Draft method, for development use, may change without warning ***
1271 // Create a SCATTER socket. Default action is connect.
1272 CZMQ_EXPORT zsock_t *
1273 zsock_new_scatter (const char *endpoint);
1274
1275 // *** Draft method, for development use, may change without warning ***
1276 // Create a DGRAM (UDP) socket. Default action is bind.
1277 // The endpoint is a string consisting of a
1278 // 'transport'`://` followed by an 'address'. As this is
1279 // a UDP socket the 'transport' has to be 'udp'. The
1280 // 'address' specifies the ip address and port to
1281 // bind to. For example: udp://127.0.0.1:1234
1282 // Note: To send to an endpoint over UDP you have to
1283 // send a message with the destination endpoint address
1284 // as a first message!
1285 CZMQ_EXPORT zsock_t *
1286 zsock_new_dgram (const char *endpoint);
1287
1288 // *** Draft method, for development use, may change without warning ***
1289 // Return socket routing ID if any. This returns 0 if the socket is not
1290 // of type ZMQ_SERVER or if no request was already received on it.
1291 CZMQ_EXPORT uint32_t
1292 zsock_routing_id (zsock_t *self);
1293
1294 // *** Draft method, for development use, may change without warning ***
1295 // Set routing ID on socket. The socket MUST be of type ZMQ_SERVER.
1296 // This will be used when sending messages on the socket via the zsock API.
1297 CZMQ_EXPORT void
1298 zsock_set_routing_id (zsock_t *self, uint32_t routing_id);
1299
1300 // *** Draft method, for development use, may change without warning ***
1301 // Join a group for the RADIO-DISH pattern. Call only on ZMQ_DISH.
1302 // Returns 0 if OK, -1 if failed.
1303 CZMQ_EXPORT int
1304 zsock_join (void *self, const char *group);
1305
1306 // *** Draft method, for development use, may change without warning ***
1307 // Leave a group for the RADIO-DISH pattern. Call only on ZMQ_DISH.
1308 // Returns 0 if OK, -1 if failed.
1309 CZMQ_EXPORT int
1310 zsock_leave (void *self, const char *group);
1311
1312 // *** Draft method, for development use, may change without warning ***
1313 // Check whether the socket has available message to read.
1314 CZMQ_EXPORT bool
1315 zsock_has_in (void *self);
1316
1317 #endif // CZMQ_BUILD_DRAFT_API
1318 Please add '@interface' section in './../src/zsock.c'.
1319
1321 The zsock class wraps the libzmq socket handle (a void *) with a proper
1322 structure that follows the CLASS rules for construction and
1323 destruction. Some zsock methods take a void * "polymorphic" reference,
1324 which can be either a zsock_t or a zactor_t reference, or a libzmq void
1325 *.
1326
1327 Please add @discuss section in ./../src/zsock.c.
1328
1330 From zsock_test method.
1331
1332 zsock_t *writer = zsock_new (ZMQ_PUSH);
1333 assert (writer);
1334 int port = zsock_bind (writer, "tcp://127.0.0.1:*");
1335 assert (port != -1);
1336 assert (zsock_resolve (writer) != writer);
1337 assert (streq (zsock_type_str (writer), "PUSH"));
1338
1339 int rc;
1340 #if (ZMQ_VERSION >= ZMQ_MAKE_VERSION (3, 2, 0))
1341 // Check unbind
1342 rc = zsock_unbind (writer, "tcp://127.0.0.1:%d", port);
1343 assert (rc == 0);
1344
1345 // In some cases and especially when running under Valgrind, doing
1346 // a bind immediately after an unbind causes an EADDRINUSE error.
1347 // Even a short sleep allows the OS to release the port for reuse.
1348 zclock_sleep (100);
1349
1350 // Bind again
1351 rc = zsock_bind (writer, "tcp://127.0.0.1:%d", port);
1352 assert (rc == port);
1353 char endpoint [40];
1354 sprintf (endpoint, "tcp://127.0.0.1:%d", port);
1355 assert (streq (zsock_endpoint (writer), endpoint));
1356 #endif
1357
1358 zsock_t *reader = zsock_new (ZMQ_PULL);
1359 assert (reader);
1360 rc = zsock_connect (reader, "tcp://127.0.0.1:%d", port);
1361 assert (rc != -1);
1362 assert (zsock_resolve (reader) != reader);
1363 assert (streq (zsock_type_str (reader), "PULL"));
1364
1365 // Basic Hello, World
1366 zstr_send (writer, "Hello, World");
1367 zmsg_t *msg = zmsg_recv (reader);
1368 assert (msg);
1369 char *string = zmsg_popstr (msg);
1370 assert (streq (string, "Hello, World"));
1371 freen (string);
1372 zmsg_destroy (&msg);
1373
1374 // Test resolve libzmq socket
1375 #if (ZMQ_VERSION >= ZMQ_MAKE_VERSION (3, 2, 0))
1376 void *zmq_ctx = zmq_ctx_new ();
1377 #else
1378 void *zmq_ctx = zmq_ctx_new (1);
1379 #endif
1380 assert (zmq_ctx);
1381 void *zmq_sock = zmq_socket (zmq_ctx, ZMQ_PUB);
1382 assert (zmq_sock);
1383 assert (zsock_resolve (zmq_sock) == zmq_sock);
1384 zmq_close (zmq_sock);
1385 zmq_ctx_term (zmq_ctx);
1386
1387 // Test resolve zsock
1388 zsock_t *resolve = zsock_new_pub("@tcp://127.0.0.1:*");
1389 assert (resolve);
1390 assert (zsock_resolve (resolve) == resolve->handle);
1391 zsock_destroy (&resolve);
1392
1393 // Test resolve FD
1394 SOCKET fd = zsock_fd (reader);
1395 assert (zsock_resolve ((void *) &fd) == NULL);
1396
1397 // Test binding to ephemeral ports, sequential and random
1398 port = zsock_bind (writer, "tcp://127.0.0.1:*");
1399 assert (port >= DYNAMIC_FIRST && port <= DYNAMIC_LAST);
1400 port = zsock_bind (writer, "tcp://127.0.0.1:*[50000-]");
1401 assert (port >= 50000 && port <= DYNAMIC_LAST);
1402 port = zsock_bind (writer, "tcp://127.0.0.1:*[-50001]");
1403 assert (port >= DYNAMIC_FIRST && port <= 50001);
1404 port = zsock_bind (writer, "tcp://127.0.0.1:*[60000-60500]");
1405 assert (port >= 60000 && port <= 60500);
1406
1407 port = zsock_bind (writer, "tcp://127.0.0.1:!");
1408 assert (port >= DYNAMIC_FIRST && port <= DYNAMIC_LAST);
1409 port = zsock_bind (writer, "tcp://127.0.0.1:![50000-]");
1410 assert (port >= 50000 && port <= DYNAMIC_LAST);
1411 port = zsock_bind (writer, "tcp://127.0.0.1:![-50001]");
1412 assert (port >= DYNAMIC_FIRST && port <= 50001);
1413 port = zsock_bind (writer, "tcp://127.0.0.1:![60000-60500]");
1414 assert (port >= 60000 && port <= 60500);
1415
1416 // Test zsock_attach method
1417 zsock_t *dealer = zsock_new (ZMQ_DEALER);
1418 assert (dealer);
1419 rc = zsock_attach (dealer, "@inproc://myendpoint,tcp://127.0.0.1:*,inproc://others", true);
1420 assert (rc == 0);
1421 rc = zsock_attach (dealer, "", false);
1422 assert (rc == 0);
1423 rc = zsock_attach (dealer, NULL, true);
1424 assert (rc == 0);
1425 rc = zsock_attach (dealer, ">a,@b, c,, ", false);
1426 assert (rc == -1);
1427 zsock_destroy (&dealer);
1428
1429 // Test zsock_endpoint method
1430 rc = zsock_bind (writer, "inproc://test.%s", "writer");
1431 assert (rc == 0);
1432 assert (streq (zsock_endpoint (writer), "inproc://test.writer"));
1433
1434 // Test error state when connecting to an invalid socket type
1435 // ('txp://' instead of 'tcp://', typo intentional)
1436 rc = zsock_connect (reader, "txp://127.0.0.1:5560");
1437 assert (rc == -1);
1438
1439 // Test signal/wait methods
1440 rc = zsock_signal (writer, 123);
1441 assert (rc == 0);
1442 rc = zsock_wait (reader);
1443 assert (rc == 123);
1444
1445 // Test zsock_send/recv pictures
1446 uint8_t number1 = 123;
1447 uint16_t number2 = 123 * 123;
1448 uint32_t number4 = 123 * 123;
1449 number4 *= 123;
1450 uint32_t number4_MAX = UINT32_MAX;
1451 uint64_t number8 = 123 * 123;
1452 number8 *= 123;
1453 number8 *= 123;
1454 uint64_t number8_MAX = UINT64_MAX;
1455
1456 zchunk_t *chunk = zchunk_new ("HELLO", 5);
1457 assert (chunk);
1458 zframe_t *frame = zframe_new ("WORLD", 5);
1459 assert (frame);
1460 zhashx_t *hash = zhashx_new ();
1461 assert (hash);
1462 #ifdef CZMQ_BUILD_DRAFT_API
1463 zlistx_t *list = zlistx_new ();
1464 assert (list);
1465 #endif
1466 zuuid_t *uuid = zuuid_new ();
1467 assert (uuid);
1468 zhashx_set_destructor (hash, (zhashx_destructor_fn *) zstr_free);
1469 zhashx_set_duplicator (hash, (zhashx_duplicator_fn *) strdup);
1470 zhashx_insert (hash, "1", "value A");
1471 zhashx_insert (hash, "2", "value B");
1472 #ifdef CZMQ_BUILD_DRAFT_API
1473 zlistx_set_destructor (list, (zlistx_destructor_fn *) zstr_free);
1474 zlistx_set_duplicator (list, (zlistx_duplicator_fn *) strdup);
1475 zlistx_add_end (list, "1");
1476 zlistx_add_end (list, "2");
1477 #endif
1478 char *original = "pointer";
1479
1480 // Test zsock_recv into each supported type
1481 #ifdef CZMQ_BUILD_DRAFT_API
1482 zsock_send (writer, "i124488zsbcfUhlp",
1483 #else
1484 zsock_send (writer, "i124488zsbcfUhp",
1485 #endif
1486 -12345, number1, number2, number4, number4_MAX,
1487 number8, number8_MAX,
1488 "This is a string", "ABCDE", 5,
1489 #ifdef CZMQ_BUILD_DRAFT_API
1490 chunk, frame, uuid, hash, list, original);
1491 #else
1492 chunk, frame, uuid, hash, original);
1493 #endif
1494 char *uuid_str = strdup (zuuid_str (uuid));
1495 zchunk_destroy (&chunk);
1496 zframe_destroy (&frame);
1497 zuuid_destroy (&uuid);
1498 zhashx_destroy (&hash);
1499 #ifdef CZMQ_BUILD_DRAFT_API
1500 zlistx_destroy (&list);
1501 #endif
1502
1503 int integer;
1504 byte *data;
1505 size_t size;
1506 char *pointer;
1507 number8_MAX = number8 = number4_MAX = number4 = number2 = number1 = 0ULL;
1508 #ifdef CZMQ_BUILD_DRAFT_API
1509 rc = zsock_recv (reader, "i124488zsbcfUhlp",
1510 #else
1511 rc = zsock_recv (reader, "i124488zsbcfUhp",
1512 #endif
1513 &integer, &number1, &number2, &number4, &number4_MAX,
1514 &number8, &number8_MAX, &string, &data, &size, &chunk,
1515 #ifdef CZMQ_BUILD_DRAFT_API
1516 &frame, &uuid, &hash, &list, &pointer);
1517 #else
1518 &frame, &uuid, &hash, &pointer);
1519 #endif
1520 assert (rc == 0);
1521 assert (integer == -12345);
1522 assert (number1 == 123);
1523 assert (number2 == 123 * 123);
1524 assert (number4 == 123 * 123 * 123);
1525 assert (number4_MAX == UINT32_MAX);
1526 assert (number8 == 123 * 123 * 123 * 123);
1527 assert (number8_MAX == UINT64_MAX);
1528 assert (streq (string, "This is a string"));
1529 assert (memcmp (data, "ABCDE", 5) == 0);
1530 assert (size == 5);
1531 assert (memcmp (zchunk_data (chunk), "HELLO", 5) == 0);
1532 assert (zchunk_size (chunk) == 5);
1533 assert (streq (uuid_str, zuuid_str (uuid)));
1534 assert (memcmp (zframe_data (frame), "WORLD", 5) == 0);
1535 assert (zframe_size (frame) == 5);
1536 char *value = (char *) zhashx_lookup (hash, "1");
1537 assert (streq (value, "value A"));
1538 value = (char *) zhashx_lookup (hash, "2");
1539 assert (streq (value, "value B"));
1540 #ifdef CZMQ_BUILD_DRAFT_API
1541 value = (char *) zlistx_first (list);
1542 assert (streq (value, "1"));
1543 value = (char *) zlistx_last (list);
1544 assert (streq (value, "2"));
1545 #endif
1546 assert (original == pointer);
1547 freen (string);
1548 freen (data);
1549 freen (uuid_str);
1550 zframe_destroy (&frame);
1551 zchunk_destroy (&chunk);
1552 zhashx_destroy (&hash);
1553 #ifdef CZMQ_BUILD_DRAFT_API
1554 zlistx_destroy (&list);
1555 #endif
1556 zuuid_destroy (&uuid);
1557
1558 // Test zsock_recv of short message; this lets us return a failure
1559 // with a status code and then nothing else; the receiver will get
1560 // the status code and NULL/zero for all other values
1561 zsock_send (writer, "i", -1);
1562 zsock_recv (reader, "izsbcfp",
1563 &integer, &string, &data, &size, &chunk, &frame, &pointer);
1564 assert (integer == -1);
1565 assert (string == NULL);
1566 assert (data == NULL);
1567 assert (size == 0);
1568 assert (chunk == NULL);
1569 assert (frame == NULL);
1570 assert (pointer == NULL);
1571
1572 msg = zmsg_new ();
1573 zmsg_addstr (msg, "frame 1");
1574 zmsg_addstr (msg, "frame 2");
1575 zsock_send (writer, "szm", "header", msg);
1576 zmsg_destroy (&msg);
1577
1578 zsock_recv (reader, "szm", &string, &msg);
1579
1580 assert (streq ("header", string));
1581 assert (zmsg_size (msg) == 2);
1582 assert (zframe_streq (zmsg_first (msg), "frame 1"));
1583 assert (zframe_streq (zmsg_next (msg), "frame 2"));
1584 zstr_free (&string);
1585 zmsg_destroy (&msg);
1586
1587 // Test zsock_recv with null arguments
1588 chunk = zchunk_new ("HELLO", 5);
1589 assert (chunk);
1590 frame = zframe_new ("WORLD", 5);
1591 assert (frame);
1592 zsock_send (writer, "izsbcfp",
1593 -12345, "This is a string", "ABCDE", 5, chunk, frame, original);
1594 zframe_destroy (&frame);
1595 zchunk_destroy (&chunk);
1596 zsock_recv (reader, "izsbcfp", &integer, NULL, NULL, NULL, &chunk, NULL, NULL);
1597 assert (integer == -12345);
1598 assert (memcmp (zchunk_data (chunk), "HELLO", 5) == 0);
1599 assert (zchunk_size (chunk) == 5);
1600 zchunk_destroy (&chunk);
1601
1602 // Test zsock_bsend/brecv pictures with binary encoding
1603 frame = zframe_new ("Hello", 5);
1604 chunk = zchunk_new ("World", 5);
1605
1606 msg = zmsg_new ();
1607 zmsg_addstr (msg, "Hello");
1608 zmsg_addstr (msg, "World");
1609
1610 zsock_bsend (writer, "1248sSpcfm",
1611 number1, number2, number4, number8,
1612 "Hello, World",
1613 "Goodbye cruel World!",
1614 original,
1615 chunk, frame, msg);
1616 zchunk_destroy (&chunk);
1617 zframe_destroy (&frame);
1618 zmsg_destroy (&msg);
1619
1620 number8 = number4 = number2 = number1 = 0;
1621 char *longstr;
1622 zsock_brecv (reader, "1248sSpcfm",
1623 &number1, &number2, &number4, &number8,
1624 &string, &longstr,
1625 &pointer,
1626 &chunk, &frame, &msg);
1627 assert (number1 == 123);
1628 assert (number2 == 123 * 123);
1629 assert (number4 == 123 * 123 * 123);
1630 assert (number8 == 123 * 123 * 123 * 123);
1631 assert (streq (string, "Hello, World"));
1632 assert (streq (longstr, "Goodbye cruel World!"));
1633 assert (pointer == original);
1634 zstr_free (&longstr);
1635 zchunk_destroy (&chunk);
1636 zframe_destroy (&frame);
1637 zmsg_destroy (&msg);
1638
1639 #ifdef ZMQ_SERVER
1640
1641 // Test zsock_bsend/brecv pictures with binary encoding on SERVER and CLIENT sockets
1642 zsock_t *server = zsock_new (ZMQ_SERVER);
1643 assert (server);
1644 port = zsock_bind (server, "tcp://127.0.0.1:*");
1645 assert (port != -1);
1646 zsock_t* client = zsock_new (ZMQ_CLIENT);
1647 assert (client);
1648 rc = zsock_connect (client, "tcp://127.0.0.1:%d", port);
1649 assert (rc != -1);
1650
1651 // From client to server
1652 chunk = zchunk_new ("World", 5);
1653 zsock_bsend (client, "1248sSpc",
1654 number1, number2, number4, number8,
1655 "Hello, World",
1656 "Goodbye cruel World!",
1657 original,
1658 chunk);
1659 zchunk_destroy (&chunk);
1660
1661 number8 = number4 = number2 = number1 = 0;
1662 zsock_brecv (server, "1248sSpc",
1663 &number1, &number2, &number4, &number8,
1664 &string, &longstr,
1665 &pointer,
1666 &chunk);
1667 assert (number1 == 123);
1668 assert (number2 == 123 * 123);
1669 assert (number4 == 123 * 123 * 123);
1670 assert (number8 == 123 * 123 * 123 * 123);
1671 assert (streq (string, "Hello, World"));
1672 assert (streq (longstr, "Goodbye cruel World!"));
1673 assert (pointer == original);
1674 assert (zsock_routing_id (server));
1675 zstr_free (&longstr);
1676 zchunk_destroy (&chunk);
1677
1678 // From server to client
1679 chunk = zchunk_new ("World", 5);
1680 zsock_bsend (server, "1248sSpc",
1681 number1, number2, number4, number8,
1682 "Hello, World",
1683 "Goodbye cruel World!",
1684 original,
1685 chunk);
1686 zchunk_destroy (&chunk);
1687
1688 number8 = number4 = number2 = number1 = 0;
1689 zsock_brecv (client, "1248sSpc",
1690 &number1, &number2, &number4, &number8,
1691 &string, &longstr,
1692 &pointer,
1693 &chunk);
1694 assert (number1 == 123);
1695 assert (number2 == 123 * 123);
1696 assert (number4 == 123 * 123 * 123);
1697 assert (number8 == 123 * 123 * 123 * 123);
1698 assert (streq (string, "Hello, World"));
1699 assert (streq (longstr, "Goodbye cruel World!"));
1700 assert (pointer == original);
1701 assert (zsock_routing_id (client) == 0);
1702 zstr_free (&longstr);
1703 zchunk_destroy (&chunk);
1704
1705 zsock_destroy (&client);
1706 zsock_destroy (&server);
1707
1708 #else
1709 errno = 0;
1710 zsock_t* server = zsock_new_server (NULL);
1711 assert(server == NULL);
1712 assert(errno == ENOTSUP);
1713
1714 errno = 0;
1715 zsock_t* client = zsock_new_client (NULL);
1716 assert(client == NULL);
1717 assert(errno == ENOTSUP);
1718 #endif
1719
1720 #ifdef ZMQ_SCATTER
1721
1722 zsock_t* gather = zsock_new_gather ("inproc://test-gather-scatter");
1723 assert (gather);
1724 zsock_t* scatter = zsock_new_scatter ("inproc://test-gather-scatter");
1725 assert (scatter);
1726
1727 rc = zstr_send (scatter, "HELLO");
1728 assert (rc == 0);
1729
1730 char* message;
1731 message = zstr_recv (gather);
1732 assert (streq(message, "HELLO"));
1733 zstr_free (&message);
1734
1735 zsock_destroy (&gather);
1736 zsock_destroy (&scatter);
1737 #else
1738 errno = 0;
1739 zsock_t* scatter = zsock_new_scatter (NULL);
1740 assert(scatter == NULL);
1741 assert(errno == ENOTSUP);
1742
1743 errno = 0;
1744 zsock_t* gather = zsock_new_gather (NULL);
1745 assert(gather == NULL);
1746 assert(errno == ENOTSUP);
1747 #endif
1748
1749 #ifndef ZMQ_RADIO
1750 errno = 0;
1751 zsock_t* radio = zsock_new_radio (NULL);
1752 assert(radio == NULL);
1753 assert(errno == ENOTSUP);
1754
1755 errno = 0;
1756 zsock_t* dish = zsock_new_dish (NULL);
1757 assert(dish == NULL);
1758 assert(errno == ENOTSUP);
1759
1760 errno = 0;
1761 zsock_t* sock = zsock_new_req (NULL); // any supported socket type
1762 rc = zsock_join (sock, "group1");
1763 assert(rc == -1);
1764 assert(errno == ENOTSUP);
1765 errno = 0;
1766 rc = zsock_leave (sock, "group1");
1767 assert(rc == -1);
1768 assert(errno == ENOTSUP);
1769 zsock_destroy (&sock);
1770 #endif
1771
1772 // Check that we can send a zproto format message
1773 zsock_bsend (writer, "1111sS4", 0xAA, 0xA0, 0x02, 0x01, "key", "value", 1234);
1774 zgossip_msg_t *gossip = zgossip_msg_new ();
1775 zgossip_msg_recv (gossip, reader);
1776 assert (zgossip_msg_id (gossip) == ZGOSSIP_MSG_PUBLISH);
1777 zgossip_msg_destroy (&gossip);
1778
1779 zsock_destroy (&reader);
1780 zsock_destroy (&writer);
1781
1782 #ifdef ZMQ_DGRAM
1783 // ZMQ_DGRAM ipv4 unicast test
1784 zsock_t* dgramr = zsock_new_dgram ("udp://*:7777");
1785 assert (dgramr);
1786 assert ( streq( "DGRAM", zsys_sockname(ZMQ_DGRAM)) );
1787 //zsock_t* dgrams = zsock_new_dgram ("udp://*:*");
1788 zsock_t* dgrams = zsock_new (ZMQ_DGRAM);
1789 zsock_bind (dgrams, "udp://127.0.0.1:7778" );
1790
1791 assert (dgrams);
1792 // perhaps sleep a little for sockets to setup?
1793
1794 rc = zstr_sendm( dgrams, "127.0.0.1:7777" );
1795 assert (rc == 0);
1796 rc = zstr_send (dgrams, "HELLO");
1797 assert (rc == 0);
1798
1799 char *dmessage, *addr;
1800
1801 zmsg_t *dmsg = zmsg_recv( dgramr );
1802 assert (dmsg);
1803 addr = zmsg_popstr (dmsg);
1804 dmessage = zmsg_popstr (dmsg);
1805 assert (streq(dmessage, "HELLO"));
1806 zmsg_destroy ( &dmsg );
1807 zsock_destroy (&dgrams);
1808 zsock_destroy (&dgramr);
1809 zstr_free (&dmessage);
1810 zstr_free (&addr);
1811 zstr_free (&message);
1812
1813 // ZMQ_DGRAM ipv4 multicast test
1814 zsock_t* mdgramr = zsock_new_dgram ("udp://225.25.25.25:7777");
1815 assert (mdgramr);
1816 zsock_t* mdgrams = zsock_new_dgram ("udp://*:*");
1817 assert (mdgrams);
1818
1819 rc = zstr_sendm( mdgrams, "225.25.25.25:7777" );
1820 assert (rc == 0);
1821 rc = zstr_send (mdgrams, "HELLO");
1822 assert (rc == 0);
1823
1824 char *mdmessage, *maddr;
1825
1826 zmsg_t *mdmsg = zmsg_recv( mdgramr );
1827 assert (mdmsg);
1828 maddr = zmsg_popstr (mdmsg);
1829 mdmessage = zmsg_popstr (mdmsg);
1830 assert (streq(mdmessage, "HELLO"));
1831 zmsg_destroy ( &mdmsg );
1832 zsock_destroy (&mdgrams);
1833 zsock_destroy (&mdgramr);
1834 zstr_free (&mdmessage);
1835 zstr_free (&maddr);
1836 zstr_free (&mdmessage);
1837
1838 // // ipv6 (not supported yet)
1839 // zsys_set_ipv6(1);
1840 // zsock_t* dgramr6 = zsock_new_dgram ("udp://*:7777");
1841 // assert (dgramr6);
1842 // zsock_t* dgrams6 = zsock_new_dgram ("udp://*:*");
1843 // assert (dgrams6);
1844 // // perhaps sleep a little for sockets to setup?
1845 // zclock_sleep(100);
1846
1847 // rc = zstr_sendm( dgrams6, "::1:7777" );
1848 // assert (rc == 0);
1849 // rc = zstr_send (dgrams6, "HELLO");
1850 // assert (rc == 0);
1851
1852 // char *dmessage6, *addr6;
1853 // zmsg_t *dmsg6 = zmsg_recv( dgramr6 );
1854 // assert (dmsg6);
1855 // addr6 = zmsg_popstr (dmsg6);
1856 // dmessage6 = zmsg_popstr(dmsg6);
1857 // assert (streq(dmessage6, "HELLO"));
1858 // zmsg_destroy( &dmsg6 );
1859 // zsock_destroy (&dgrams6);
1860 // zsock_destroy (&dgramr6);
1861
1862 // zstr_free (&dmessage6);
1863 // zstr_free (&addr6);
1864 // zstr_free (&dmessage6);
1865 #endif
1866
1867
1869 The czmq manual was written by the authors in the AUTHORS file.
1870
1872 Main web site:
1873
1874 Report bugs to the email <zeromq-dev@lists.zeromq.org[1]>
1875
1877 Copyright (c) the Contributors as noted in the AUTHORS file. This file
1878 is part of CZMQ, the high-level C binding for 0MQ:
1879 http://czmq.zeromq.org. This Source Code Form is subject to the terms
1880 of the Mozilla Public License, v. 2.0. If a copy of the MPL was not
1881 distributed with this file, You can obtain one at
1882 http://mozilla.org/MPL/2.0/. LICENSE included with the czmq
1883 distribution.
1884
1886 1. zeromq-dev@lists.zeromq.org
1887 mailto:zeromq-dev@lists.zeromq.org
1888
1889
1890
1891CZMQ 4.2.1 07/20/2022 ZSOCK(3)