2
.\" Title: zmq_ctx_socket_monitor
3
.\" Author: [see the "AUTHORS" section]
4
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
10
.TH "ZMQ_CTX_SOCKET_MONIT" "3" "10/15/2012" "0MQ 3\&.2\&.1" "0MQ Manual"
11
.\" -----------------------------------------------------------------
12
.\" * Define some portability stuff
13
.\" -----------------------------------------------------------------
14
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15
.\" http://bugs.debian.org/507673
16
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
17
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20
.\" -----------------------------------------------------------------
21
.\" * set default formatting
22
.\" -----------------------------------------------------------------
23
.\" disable hyphenation
25
.\" disable justification (adjust text to left margin only)
27
.\" -----------------------------------------------------------------
28
.\" * MAIN CONTENT STARTS HERE *
29
.\" -----------------------------------------------------------------
31
zmq_socket_monitor \- register a monitoring callback
34
\fBint zmq_socket_monitor (void \fR\fB\fI*socket\fR\fR\fB, char * \fR\fB\fI*addr\fR\fR\fB, int \fR\fB\fIevents\fR\fR\fB);\fR
37
The \fIzmq_socket_monitor()\fR function shall spawn a \fIPAIR\fR socket that publishes socket state changes (events) over the inproc:// transport to a given endpoint\&. Messages are \fIzmq_event_t\fR structs\&. It\(cqs recommended to connect via a \fIPAIR\fR socket in another application thread and handle monitoring events there\&. It\(cqs possible to also supply a bitmask (\fIZMQ_EVENT_ALL\fR or any combination of the \fIZMQ_EVENT_*\fR constants) of the events you\(cqre interested in\&.
44
static void *req_socket_monitor (void *ctx)
49
void *s = zmq_socket (ctx, ZMQ_PAIR);
52
rc = zmq_connect (s, "inproc://monitor\&.req");
57
rc = zmq_recvmsg (s, &msg, 0);
58
if (rc == \-1 && zmq_errno() == ETERM) break;
60
memcpy (&event, zmq_msg_data (&msg), sizeof (event));
61
switch (event\&.event) {
62
case ZMQ_EVENT_CONNECTED:
63
// handle socket connected event
65
case ZMQ_EVENT_CLOSED:
66
// handle socket closed event
74
// register a monitor endpoint for all socket events
75
rc = zmq_socket_monitor (req, "inproc://monitor\&.req", ZMQ_EVENT_ALL);
78
// spawn a monitoring thread
79
rc = pthread_create (&threads [0], NULL, req_socket_monitor, ctx);
86
Only connection oriented (tcp and ipc) transports are supported in this initial implementation\&.
89
.SS "ZMQ_EVENT_CONNECTED: connection established"
91
The \fIZMQ_EVENT_CONNECTED\fR event triggers when a connection has been established to a remote peer\&. This can happen either synchronous or asynchronous\&.
93
\fBEvent metadata:\fR.
99
data\&.connected\&.addr // peer address
100
data\&.connected\&.fd // socket descriptor
106
.SS "ZMQ_EVENT_CONNECT_DELAYED: synchronous connect failed, it\(cqs being polled"
108
The \fIZMQ_EVENT_CONNECT_DELAYED\fR event triggers when an immediate connection attempt is delayed and it\(cqs completion\(cqs being polled for\&.
110
\fBEvent metadata:\fR.
116
data\&.connect_delayed\&.addr // peer address
117
data\&.connect_delayed\&.err // errno value
123
.SS "ZMQ_EVENT_CONNECT_RETRIED: asynchronous connect / reconnection attempt"
125
The \fIZMQ_EVENT_CONNECT_RETRIED\fR event triggers when a connection attempt is being handled by reconnect timer\&. The reconnect interval\(cqs recomputed for each attempt\&.
127
\fBEvent metadata:\fR.
133
data\&.connect_retried\&.addr // peer address
134
data\&.connect_retried\&.interval // computed reconnect interval
140
.SS "ZMQ_EVENT_LISTENING: socket bound to an address, ready to accept connections"
142
The \fIZMQ_EVENT_LISTENING\fR event triggers when a socket\(cqs successfully bound to a an interface\&.
144
\fBEvent metadata:\fR.
150
data\&.listening\&.addr // listen address
151
data\&.listening\&.fd // socket descriptor
157
.SS "ZMQ_EVENT_BIND_FAILED: socket could not bind to an address"
159
The \fIZMQ_EVENT_BIND_FAILED\fR event triggers when a socket could not bind to a given interface\&.
161
\fBEvent metadata:\fR.
167
data\&.bind_failed\&.addr // listen address
168
data\&.bind_failed\&.err // errno value
174
.SS "ZMQ_EVENT_ACCEPTED: connection accepted to bound interface"
176
The \fIZMQ_EVENT_ACCEPTED\fR event triggers when a connection from a remote peer has been established with a socket\(cqs listen address\&.
178
\fBEvent metadata:\fR.
184
data\&.accepted\&.addr // listen address
185
data\&.accepted\&.fd // socket descriptor
191
.SS "ZMQ_EVENT_ACCEPT_FAILED: could not accept client connection"
193
The \fIZMQ_EVENT_ACCEPT_FAILED\fR event triggers when a connection attempt to a socket\(cqs bound address fails\&.
195
\fBEvent metadata:\fR.
201
data\&.accept_failed\&.addr // listen address
202
data\&.accept_failed\&.err // errno value
208
.SS "ZMQ_EVENT_CLOSED: connection closed"
210
The \fIZMQ_EVENT_CLOSED\fR event triggers when a connection\(cqs underlying descriptor has been closed\&.
212
\fBEvent metadata:\fR.
218
data\&.closed\&.addr // address
219
data\&.closed\&.fd // socket descriptor
225
.SS "ZMQ_EVENT_CLOSE_FAILED: connection couldn\(cqt be closed"
227
The \fIZMQ_EVENT_CLOSE_FAILED\fR event triggers when a descriptor could not be released back to the OS\&.
229
\fBEvent metadata:\fR.
235
data\&.close_failed\&.addr // address
236
data\&.close_failed\&.err // errno value
242
.SS "ZMQ_EVENT_DISCONNECTED: broken session"
244
The \fIZMQ_EVENT_DISCONNECTED\fR event triggers when the stream engine (tcp and ipc specific) detects a corrupted / broken session\&.
246
\fBEvent metadata:\fR.
252
data\&.disconnected\&.addr // address
253
data\&.disconnected\&.fd // socket descriptor
261
The \fIzmq_socket_monitor()\fR function returns a value of 0 or greater if successful\&. Otherwise it returns \-1 and sets \fIerrno\fR to one of the values defined below\&.
268
associated with the specified
273
\fBEPROTONOSUPPORT\fR
277
protocol is not supported\&. Monitor sockets are required to use the inproc:// transport\&.
282
The endpoint supplied is invalid\&.
286
\fBObserving a REP socket\(cqs connection state\fR.
292
// REP socket monitor thread
293
static void *rep_socket_monitor (void *ctx)
298
void *s = zmq_socket (ctx, ZMQ_PAIR);
301
rc = zmq_connect (s, "inproc://monitor\&.rep");
306
rc = zmq_recvmsg (s, &msg, 0);
307
if (rc == \-1 && zmq_errno() == ETERM) break;
309
memcpy (&event, zmq_msg_data (&msg), sizeof (event));
310
switch (event\&.event) {
311
case ZMQ_EVENT_LISTENING:
312
printf ("listening socket descriptor %d\en", event\&.data\&.listening\&.fd);
313
printf ("listening socket address %s\en", event\&.data\&.listening\&.addr);
315
case ZMQ_EVENT_ACCEPTED:
316
printf ("accepted socket descriptor %d\en", event\&.data\&.accepted\&.fd);
317
printf ("accepted socket address %s\en", event\&.data\&.accepted\&.addr);
319
case ZMQ_EVENT_CLOSE_FAILED:
320
printf ("socket close failure error code %d\en", event\&.data\&.close_failed\&.err);
321
printf ("socket address %s\en", event\&.data\&.close_failed\&.addr);
323
case ZMQ_EVENT_CLOSED:
324
printf ("closed socket descriptor %d\en", event\&.data\&.closed\&.fd);
325
printf ("closed socket address %s\en", event\&.data\&.closed\&.addr);
327
case ZMQ_EVENT_DISCONNECTED:
328
printf ("disconnected socket descriptor %d\en", event\&.data\&.disconnected\&.fd);
329
printf ("disconnected socket address %s\en", event\&.data\&.disconnected\&.addr);
332
zmq_msg_close (&msg);
339
// Create the infrastructure
340
void *ctx = zmq_init (1);
344
rep = zmq_socket (ctx, ZMQ_REP);
347
// REP socket monitor, all events
348
rc = zmq_socket_monitor (rep, "inproc://monitor\&.rep", ZMQ_EVENT_ALL);
350
rc = pthread_create (&threads [0], NULL, rep_socket_monitor, ctx);
353
rc = zmq_bind (rep, addr);
356
// Allow some time for event detection
359
// Close the REP socket
360
rc = zmq_close (rep);
374
This 0MQ manual page was written by Lourens Naud\('e <\m[blue]\fBlourens@methodmissing\&.com\fR\m[]\&\s-2\u[1]\d\s+2>
377
lourens@methodmissing.com
379
\%mailto:lourens@methodmissing.com