summaryrefslogtreecommitdiff
path: root/doc/zmq_socket_monitor.3
diff options
context:
space:
mode:
Diffstat (limited to 'doc/zmq_socket_monitor.3')
-rw-r--r--doc/zmq_socket_monitor.3241
1 files changed, 0 insertions, 241 deletions
diff --git a/doc/zmq_socket_monitor.3 b/doc/zmq_socket_monitor.3
deleted file mode 100644
index f4c4413..0000000
--- a/doc/zmq_socket_monitor.3
+++ /dev/null
@@ -1,241 +0,0 @@
-'\" t
-.\" Title: zmq_ctx_socket_monitor
-.\" Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\" Date: 03/10/2014
-.\" Manual: 0MQ Manual
-.\" Source: 0MQ 4.0.1
-.\" Language: English
-.\"
-.TH "ZMQ_CTX_SOCKET_MONIT" "3" "03/10/2014" "0MQ 4\&.0\&.1" "0MQ Manual"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
-zmq_socket_monitor \- register a monitoring callback
-.SH "SYNOPSIS"
-.sp
-\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
-.SH "DESCRIPTION"
-.sp
-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\&.
-.sp
-Messages consist of 2 Frames, the first containing the event\-id and the associated value\&. The second frame holds the affected endpoint as string\&.
-.sp
-The layout of the first Frame is: 16 bit event id 32 bit event value
-.sp
-event id and value are in the native byte order (for the machine the application is running on)\&. There is no padding between the fields\&.
-.sp
-The event value has to be interpreted in the context of the event id\&. See \fISupported events\fR below for details\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-Only connection oriented (tcp and ipc) transports are supported in this initial
-implementation\&.
-.fi
-.if n \{\
-.RE
-.\}
-.SH "SUPPORTED EVENTS"
-.SS "ZMQ_EVENT_CONNECTED: connection established"
-.sp
-The \fIZMQ_EVENT_CONNECTED\fR event triggers when a connection has been established to a remote peer\&. This can happen either synchronous or asynchronous\&. Value is the FD of the newly connected socket\&.
-.SS "ZMQ_EVENT_CONNECT_DELAYED: synchronous connect failed, it\(cqs being polled"
-.sp
-The \fIZMQ_EVENT_CONNECT_DELAYED\fR event triggers when an immediate connection attempt is delayed and its completion is being polled for\&. Value has no meaning\&.
-.SS "ZMQ_EVENT_CONNECT_RETRIED: asynchronous connect / reconnection attempt"
-.sp
-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\&. Value is the reconnect interval\&.
-.SS "ZMQ_EVENT_LISTENING: socket bound to an address, ready to accept connections"
-.sp
-The \fIZMQ_EVENT_LISTENING\fR event triggers when a socket\(cqs successfully bound to a an interface\&. Value is the FD of the newly bound socket\&.
-.SS "ZMQ_EVENT_BIND_FAILED: socket could not bind to an address"
-.sp
-The \fIZMQ_EVENT_BIND_FAILED\fR event triggers when a socket could not bind to a given interface\&. Value is the errno generated by the bind call\&.
-.SS "ZMQ_EVENT_ACCEPTED: connection accepted to bound interface"
-.sp
-The \fIZMQ_EVENT_ACCEPTED\fR event triggers when a connection from a remote peer has been established with a socket\(cqs listen address\&. Value is the FD of the accepted socket\&.
-.SS "ZMQ_EVENT_ACCEPT_FAILED: could not accept client connection"
-.sp
-The \fIZMQ_EVENT_ACCEPT_FAILED\fR event triggers when a connection attempt to a socket\(cqs bound address fails\&. Value is the errno generated by accept\&.
-.SS "ZMQ_EVENT_CLOSED: connection closed"
-.sp
-The \fIZMQ_EVENT_CLOSED\fR event triggers when a connection\(cqs underlying descriptor has been closed\&. Value is the former FD of the for the closed socket\&. FD has been closed already!
-.SS "ZMQ_EVENT_CLOSE_FAILED: connection couldn\(cqt be closed"
-.sp
-The \fIZMQ_EVENT_CLOSE_FAILED\fR event triggers when a descriptor could not be released back to the OS\&. Implementation note: ONLY FOR IPC SOCKETS\&. Value is the errno generated by unlink\&.
-.SS "ZMQ_EVENT_DISCONNECTED: broken session"
-.sp
-The \fIZMQ_EVENT_DISCONNECTED\fR event triggers when the stream engine (tcp and ipc specific) detects a corrupted / broken session\&. Value is the FD of the socket\&.
-.SH "RETURN VALUE"
-.sp
-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\&.
-.SH "ERRORS"
-.PP
-\fBETERM\fR
-.RS 4
-The 0MQ
-\fIcontext\fR
-associated with the specified
-\fIsocket\fR
-was terminated\&.
-.RE
-.PP
-\fBEPROTONOSUPPORT\fR
-.RS 4
-The requested
-\fItransport\fR
-protocol is not supported\&. Monitor sockets are required to use the inproc:// transport\&.
-.RE
-.PP
-\fBEINVAL\fR
-.RS 4
-The endpoint supplied is invalid\&.
-.RE
-.SH "EXAMPLE"
-.PP
-\fBObserving a REP socket\(cqs connection state\fR.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-#include <stdio\&.h>
-#include <zmq\&.h>
-#include <pthread\&.h>
-#include <string\&.h>
-#include <assert\&.h>
-
-static int read_msg(void* s, zmq_event_t* event, char* ep)
-{
- int rc ;
- zmq_msg_t msg1; // binary part
- zmq_msg_init (&msg1);
- zmq_msg_t msg2; // address part
- zmq_msg_init (&msg2);
- rc = zmq_msg_recv (&msg1, s, 0);
- if (rc == \-1 && zmq_errno() == ETERM)
- return 1 ;
- assert (rc != \-1);
- assert (zmq_msg_more(&msg1) != 0);
- rc = zmq_msg_recv (&msg2, s, 0);
- if (rc == \-1 && zmq_errno() == ETERM)
- return 1;
- assert (rc != \-1);
- assert (zmq_msg_more(&msg2) == 0);
- // copy binary data to event struct
- const char* data = (char*)zmq_msg_data(&msg1);
- memcpy(&(event\->event), data, sizeof(event\->event));
- memcpy(&(event\->value), data+sizeof(event\->event), sizeof(event\->value));
- // copy address part
- const size_t len = zmq_msg_size(&msg2) ;
- ep = memcpy(ep, zmq_msg_data(&msg2), len);
- *(ep + len) = 0 ;
- return 0 ;
-}
-
-// REP socket monitor thread
-static void *rep_socket_monitor (void *ctx)
-{
- zmq_event_t event;
- static char addr[1025] ;
- int rc;
-
- printf("starting monitor\&.\&.\&.\en");
-
- void *s = zmq_socket (ctx, ZMQ_PAIR);
- assert (s);
-
- rc = zmq_connect (s, "inproc://monitor\&.rep");
- assert (rc == 0);
- while (!read_msg(s, &event, addr)) {
- switch (event\&.event) {
- case ZMQ_EVENT_LISTENING:
- printf ("listening socket descriptor %d\en", event\&.value);
- printf ("listening socket address %s\en", addr);
- break;
- case ZMQ_EVENT_ACCEPTED:
- printf ("accepted socket descriptor %d\en", event\&.value);
- printf ("accepted socket address %s\en", addr);
- break;
- case ZMQ_EVENT_CLOSE_FAILED:
- printf ("socket close failure error code %d\en", event\&.value);
- printf ("socket address %s\en", addr);
- break;
- case ZMQ_EVENT_CLOSED:
- printf ("closed socket descriptor %d\en", event\&.value);
- printf ("closed socket address %s\en", addr);
- break;
- case ZMQ_EVENT_DISCONNECTED:
- printf ("disconnected socket descriptor %d\en", event\&.value);
- printf ("disconnected socket address %s\en", addr);
- break;
- }
- }
- zmq_close (s);
- return NULL;
-}
-
-
-int main()
-{
- const char* addr = "tcp://127\&.0\&.0\&.1:6666" ;
- pthread_t thread ;
-
- // Create the infrastructure
- void *ctx = zmq_init (1);
- assert (ctx);
-
- // REP socket
- void* rep = zmq_socket (ctx, ZMQ_REP);
- assert (rep);
-
- // REP socket monitor, all events
- int rc = zmq_socket_monitor (rep, "inproc://monitor\&.rep", ZMQ_EVENT_ALL);
- assert (rc == 0);
- rc = pthread_create (&thread, NULL, rep_socket_monitor, ctx);
- assert (rc == 0);
-
- rc = zmq_bind (rep, addr);
- assert (rc == 0);
-
- // Allow some time for event detection
- zmq_sleep (1);
-
- // Close the REP socket
- rc = zmq_close (rep);
- assert (rc == 0);
-
- zmq_term (ctx);
-
- return 0 ;
-}
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.SH "SEE ALSO"
-.sp
-\fBzmq\fR(7)
-.SH "AUTHORS"
-.sp
-This page was written by the 0MQ community\&. To make a change please read the 0MQ Contribution Policy at \m[blue]\fBhttp://www\&.zeromq\&.org/docs:contributing\fR\m[]\&.