From 2d44bf3644c8e12aa86c48e9da4df19bfa9ea703 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Wed, 10 Feb 2010 11:04:28 +0100 Subject: ZMQII-69: Make 0MQ build on HP-UX --- src/fd_signaler.cpp | 4 ++-- src/tcp_connecter.cpp | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/fd_signaler.cpp b/src/fd_signaler.cpp index 9ab307e..f1ec6af 100644 --- a/src/fd_signaler.cpp +++ b/src/fd_signaler.cpp @@ -249,10 +249,10 @@ void zmq::fd_signaler_t::signal (int signal_) uint64_t zmq::fd_signaler_t::poll () { // Set the reader to blocking mode. - int flags = fcntl (fd, F_GETFL, 0); + int flags = fcntl (r, F_GETFL, 0); if (flags == -1) flags = 0; - int rc = fcntl (fd, F_SETFL, flags & ~O_NONBLOCK); + int rc = fcntl (r, F_SETFL, flags & ~O_NONBLOCK); errno_assert (rc != -1); // Poll for events. diff --git a/src/tcp_connecter.cpp b/src/tcp_connecter.cpp index 4df4fae..06214e2 100644 --- a/src/tcp_connecter.cpp +++ b/src/tcp_connecter.cpp @@ -268,7 +268,11 @@ zmq::fd_t zmq::tcp_connecter_t::connect () // Following code should handle both Berkeley-derived socket // implementations and Solaris. int err = 0; - socklen_t len = sizeof err; +#if defined ZMQ_HAVE_HPUX + int len = sizeof (err); +#else + socklen_t len = sizeof (err); +#endif int rc = getsockopt (s, SOL_SOCKET, SO_ERROR, (char*) &err, &len); if (rc == -1) err = errno; -- cgit v1.2.3 From 354efc513fdb4096f8830e6c2e3e8f1311303e61 Mon Sep 17 00:00:00 2001 From: Martin Lucina Date: Wed, 10 Feb 2010 16:18:46 +0100 Subject: Convert documentation to AsciiDoc --- .gitignore | 5 ++ Makefile.am | 8 +- configure.in | 19 ++++- doc/Makefile.am | 41 ++++++++++ doc/asciidoc.conf | 34 +++++++++ doc/zmq.txt | 175 +++++++++++++++++++++++++++++++++++++++++++ doc/zmq_bind.txt | 67 +++++++++++++++++ doc/zmq_close.txt | 52 +++++++++++++ doc/zmq_connect.txt | 63 ++++++++++++++++ doc/zmq_cpp.txt | 89 ++++++++++++++++++++++ doc/zmq_flush.txt | 59 +++++++++++++++ doc/zmq_forwarder.txt | 32 ++++++++ doc/zmq_init.txt | 61 +++++++++++++++ doc/zmq_inproc.txt | 50 +++++++++++++ doc/zmq_ipc.txt | 44 +++++++++++ doc/zmq_java.txt | 27 +++++++ doc/zmq_msg_close.txt | 53 +++++++++++++ doc/zmq_msg_copy.txt | 60 +++++++++++++++ doc/zmq_msg_data.txt | 50 +++++++++++++ doc/zmq_msg_init.txt | 54 +++++++++++++ doc/zmq_msg_init_data.txt | 67 +++++++++++++++++ doc/zmq_msg_init_size.txt | 61 +++++++++++++++ doc/zmq_msg_move.txt | 55 ++++++++++++++ doc/zmq_msg_size.txt | 53 +++++++++++++ doc/zmq_pgm.txt | 106 ++++++++++++++++++++++++++ doc/zmq_poll.txt | 85 +++++++++++++++++++++ doc/zmq_python.txt | 27 +++++++ doc/zmq_queue.txt | 32 ++++++++ doc/zmq_recv.txt | 66 ++++++++++++++++ doc/zmq_send.txt | 77 +++++++++++++++++++ doc/zmq_setsockopt.txt | 155 ++++++++++++++++++++++++++++++++++++++ doc/zmq_socket.txt | 126 +++++++++++++++++++++++++++++++ doc/zmq_streamer.txt | 32 ++++++++ doc/zmq_strerror.txt | 50 +++++++++++++ doc/zmq_tcp.txt | 93 +++++++++++++++++++++++ doc/zmq_term.txt | 49 ++++++++++++ doc/zmq_udp.txt | 56 ++++++++++++++ man/Makefile.am | 22 ------ man/convert2html.sh | 55 -------------- man/convert2pdf.sh | 88 ---------------------- man/man1/zmq_forwarder.1 | 11 --- man/man1/zmq_queue.1 | 11 --- man/man1/zmq_streamer.1 | 11 --- man/man3/zmq_bind.3 | 52 ------------- man/man3/zmq_close.3 | 30 -------- man/man3/zmq_connect.3 | 49 ------------ man/man3/zmq_flush.3 | 37 --------- man/man3/zmq_init.3 | 40 ---------- man/man3/zmq_msg_close.3 | 32 -------- man/man3/zmq_msg_copy.3 | 43 ----------- man/man3/zmq_msg_data.3 | 27 ------- man/man3/zmq_msg_init.3 | 33 -------- man/man3/zmq_msg_init_data.3 | 55 -------------- man/man3/zmq_msg_init_size.3 | 44 ----------- man/man3/zmq_msg_move.3 | 38 ---------- man/man3/zmq_msg_size.3 | 30 -------- man/man3/zmq_poll.3 | 71 ------------------ man/man3/zmq_recv.3 | 52 ------------- man/man3/zmq_send.3 | 64 ---------------- man/man3/zmq_setsockopt.3 | 137 --------------------------------- man/man3/zmq_socket.3 | 110 --------------------------- man/man3/zmq_strerror.3 | 27 ------- man/man3/zmq_term.3 | 25 ------- man/man7/zmq.7 | 151 ------------------------------------- man/man7/zmq_cl.7 | 124 ------------------------------ man/man7/zmq_cpp.7 | 103 ------------------------- man/man7/zmq_inproc.7 | 42 ----------- man/man7/zmq_ipc.7 | 34 --------- man/man7/zmq_java.7 | 9 --- man/man7/zmq_pgm.7 | 98 ------------------------ man/man7/zmq_python.7 | 9 --- man/man7/zmq_tcp.7 | 80 -------------------- man/man7/zmq_udp.7 | 45 ----------- 73 files changed, 2224 insertions(+), 1898 deletions(-) create mode 100644 doc/Makefile.am create mode 100644 doc/asciidoc.conf create mode 100644 doc/zmq.txt create mode 100644 doc/zmq_bind.txt create mode 100644 doc/zmq_close.txt create mode 100644 doc/zmq_connect.txt create mode 100644 doc/zmq_cpp.txt create mode 100644 doc/zmq_flush.txt create mode 100644 doc/zmq_forwarder.txt create mode 100644 doc/zmq_init.txt create mode 100644 doc/zmq_inproc.txt create mode 100644 doc/zmq_ipc.txt create mode 100644 doc/zmq_java.txt create mode 100644 doc/zmq_msg_close.txt create mode 100644 doc/zmq_msg_copy.txt create mode 100644 doc/zmq_msg_data.txt create mode 100644 doc/zmq_msg_init.txt create mode 100644 doc/zmq_msg_init_data.txt create mode 100644 doc/zmq_msg_init_size.txt create mode 100644 doc/zmq_msg_move.txt create mode 100644 doc/zmq_msg_size.txt create mode 100644 doc/zmq_pgm.txt create mode 100644 doc/zmq_poll.txt create mode 100644 doc/zmq_python.txt create mode 100644 doc/zmq_queue.txt create mode 100644 doc/zmq_recv.txt create mode 100644 doc/zmq_send.txt create mode 100644 doc/zmq_setsockopt.txt create mode 100644 doc/zmq_socket.txt create mode 100644 doc/zmq_streamer.txt create mode 100644 doc/zmq_strerror.txt create mode 100644 doc/zmq_tcp.txt create mode 100644 doc/zmq_term.txt create mode 100644 doc/zmq_udp.txt delete mode 100644 man/Makefile.am delete mode 100644 man/convert2html.sh delete mode 100755 man/convert2pdf.sh delete mode 100644 man/man1/zmq_forwarder.1 delete mode 100644 man/man1/zmq_queue.1 delete mode 100644 man/man1/zmq_streamer.1 delete mode 100644 man/man3/zmq_bind.3 delete mode 100644 man/man3/zmq_close.3 delete mode 100644 man/man3/zmq_connect.3 delete mode 100644 man/man3/zmq_flush.3 delete mode 100644 man/man3/zmq_init.3 delete mode 100644 man/man3/zmq_msg_close.3 delete mode 100644 man/man3/zmq_msg_copy.3 delete mode 100644 man/man3/zmq_msg_data.3 delete mode 100644 man/man3/zmq_msg_init.3 delete mode 100644 man/man3/zmq_msg_init_data.3 delete mode 100644 man/man3/zmq_msg_init_size.3 delete mode 100644 man/man3/zmq_msg_move.3 delete mode 100644 man/man3/zmq_msg_size.3 delete mode 100644 man/man3/zmq_poll.3 delete mode 100644 man/man3/zmq_recv.3 delete mode 100644 man/man3/zmq_send.3 delete mode 100644 man/man3/zmq_setsockopt.3 delete mode 100644 man/man3/zmq_socket.3 delete mode 100644 man/man3/zmq_strerror.3 delete mode 100644 man/man3/zmq_term.3 delete mode 100644 man/man7/zmq.7 delete mode 100644 man/man7/zmq_cl.7 delete mode 100644 man/man7/zmq_cpp.7 delete mode 100644 man/man7/zmq_inproc.7 delete mode 100644 man/man7/zmq_ipc.7 delete mode 100644 man/man7/zmq_java.7 delete mode 100644 man/man7/zmq_pgm.7 delete mode 100644 man/man7/zmq_python.7 delete mode 100644 man/man7/zmq_tcp.7 delete mode 100644 man/man7/zmq_udp.7 diff --git a/.gitignore b/.gitignore index 5a4133d..1c68975 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,8 @@ perf/cpp/local_lat perf/cpp/local_thr perf/cpp/remote_lat perf/cpp/remote_thr +doc/*.1 +doc/*.3 +doc/*.7 +doc/*.html +doc/*.xml diff --git a/Makefile.am b/Makefile.am index 81d1598..8795e14 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,12 +4,8 @@ if BUILD_PERF DIR_PERF = perf endif -if INSTALL_MAN -DIR_MAN = man -endif - -SUBDIRS = src $(DIR_MAN) $(DIR_PERF) devices bindings examples -DIST_SUBDIRS = src man perf devices bindings examples +SUBDIRS = src doc $(DIR_PERF) devices bindings examples +DIST_SUBDIRS = src doc perf devices bindings examples EXTRA_DIST = \ $(top_srcdir)/foreign/openpgm/@pgm2_basename@.tar.bz2 \ diff --git a/configure.in b/configure.in index 078f27c..af69a59 100644 --- a/configure.in +++ b/configure.in @@ -50,9 +50,20 @@ on_mingw32="no" # Host speciffic checks AC_CANONICAL_HOST -# Whether or not install manual pages. -# Note that on MinGW manpages are not installed. +# Determine whether or not documentation should be built. +build_doc="yes" install_man="yes" +if test ! -f "doc/zmq.html"; then +# We are building from git. +# Check for asciidoc and xmlto and don't build the docs if these are not installed. + AC_CHECK_PROG(have_asciidoc, asciidoc, yes, no) + AC_CHECK_PROG(have_xmlto, xmlto, yes, no) + if test "x$have_asciidoc" = "xno" -o "x$have_xmlto" = "xno"; then + build_doc="no" + install_man="no" + AC_MSG_WARN([You are building from git and asciidoc is not installed. Documentation will not be built or installed.]) + fi +fi case "${host_os}" in *linux*) @@ -551,6 +562,7 @@ AM_CONDITIONAL(BUILD_CHAT, test "x$chat" = "xyes") AM_CONDITIONAL(ON_MINGW, test "x$on_mingw32" = "xyes") AM_CONDITIONAL(BUILD_PGM2_EXAMPLES, test "x$with_pgm2_examples" = "xyes") AM_CONDITIONAL(INSTALL_MAN, test "x$install_man" = "xyes") +AM_CONDITIONAL(BUILD_DOC, test "x$build_doc" = "xyes") AC_SUBST(stdint) AC_SUBST(inttypes) @@ -565,7 +577,7 @@ AC_FUNC_MALLOC AC_TYPE_SIGNAL AC_CHECK_FUNCS(perror gettimeofday memset socket getifaddrs freeifaddrs) -AC_OUTPUT(Makefile src/Makefile man/Makefile bindings/python/Makefile \ +AC_OUTPUT(Makefile src/Makefile doc/Makefile bindings/python/Makefile \ bindings/python/setup.py bindings/ruby/Makefile \ bindings/java/Makefile perf/Makefile perf/c/Makefile perf/cpp/Makefile \ perf/python/Makefile perf/ruby/Makefile perf/java/Makefile src/libzmq.pc \ @@ -615,6 +627,7 @@ AC_MSG_RESULT([ Queue: $queue]) AC_MSG_RESULT([ Performance tests: $perf]) AC_MSG_RESULT([ Examples:]) AC_MSG_RESULT([ Chat: $chat]) +AC_MSG_RESULT([ Documentation: $build_doc]) AC_MSG_RESULT([]) AC_MSG_RESULT([ ******************************************************** ]) AC_MSG_RESULT([]) diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..07dfb02 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,41 @@ +MAN1 = zmq_forwarder.1 zmq_streamer.1 zmq_queue.1 +MAN3 = zmq_bind.3 zmq_close.3 zmq_connect.3 zmq_flush.3 zmq_init.3 \ + zmq_msg_close.3 zmq_msg_copy.3 zmq_msg_data.3 zmq_msg_init.3 \ + zmq_msg_init_data.3 zmq_msg_init_size.3 zmq_msg_move.3 zmq_msg_size.3 \ + zmq_poll.3 zmq_recv.3 zmq_send.3 zmq_setsockopt.3 zmq_socket.3 zmq_strerror.3 \ + zmq_term.3 +MAN7 = zmq.7 zmq_tcp.7 zmq_udp.7 zmq_pgm.7 zmq_inproc.7 zmq_ipc.7 \ + zmq_cpp.7 zmq_java.7 zmq_python.7 +MAN_DOC = $(MAN1) $(MAN3) $(MAN7) + +MAN_TXT = $(MAN1:%.1=%.txt) +MAN_TXT += $(MAN3:%.3=%.txt) +MAN_TXT += $(MAN7:%.7=%.txt) +MAN_HTML = $(MAN_TXT:%.txt=%.html) + +if INSTALL_MAN +dist_man_MANS = $(MAN_DOC) +endif + +EXTRA_DIST = $(MAN_TXT) +if BUILD_DOC +EXTRA_DIST += $(MAN_HTML) +endif + +MAINTAINERCLEANFILES = $(MAN_DOC) $(MAN_HTML) + +dist-hook : $(MAN_DOC) $(MAN_HTML) + +SUFFIXES=.html .txt .xml .1 .3 .7 + +.txt.html: + asciidoc -d manpage -b xhtml11 -f asciidoc.conf $< +.txt.xml: + asciidoc -d manpage -b docbook -f asciidoc.conf $< +.xml.1: + xmlto man $< +.xml.3: + xmlto man $< +.xml.7: + xmlto man $< + diff --git a/doc/asciidoc.conf b/doc/asciidoc.conf new file mode 100644 index 0000000..d1dac78 --- /dev/null +++ b/doc/asciidoc.conf @@ -0,0 +1,34 @@ +[macros] +(?su)[\\]?(?Plinkzmq):(?P\S*?)\[(?P.*?)\]= + +ifdef::backend-docbook[] +[linkzmq-inlinemacro] +{0%{target}} +{0#} +{0#{target}{0}} +{0#} +endif::backend-docbook[] + +ifdef::backend-xhtml11[] +[linkzmq-inlinemacro] +{target}{0?({0})} +endif::backend-xhtml11[] + +ifdef::doctype-manpage[] +ifdef::backend-docbook[] +[header] +template::[header-declarations] + + +{mantitle} +{manvolnum} +0MQ +2.0.0 +0MQ Manual + + + {manname} + {manpurpose} + +endif::backend-docbook[] +endif::doctype-manpage[] diff --git a/doc/zmq.txt b/doc/zmq.txt new file mode 100644 index 0000000..0c911c3 --- /dev/null +++ b/doc/zmq.txt @@ -0,0 +1,175 @@ +zmq(7) +====== + + +NAME +---- +zmq - 0MQ lightweight messaging kernel + + +SYNOPSIS +-------- +0MQ is an extension of POSIX sockets. It is a library that augments standard +networking sockets by special capabilities that you can otherwise get only +by using specialised "messaging middleware" products, such as automated +handling of connections and disconnections, delivery of a message to multiple +destinations, load balancing messages, sophisticated message filtering etc. + +0MQ is designed to be extremely fast. Expected end-to-end latencies for +messages passed over a LAN are in tens of microseconds. Expected +throughputs are to be measured in millions of messages per second. + +0MQ is designed to be very thin. It requires no more than couple of +pages in resident memory and is thus well suited for any environment ranging +from small embedded devices, routers and cell phones to enterprise-scale +data centers. + +0MQ runs on a wide range of operating systems and supports variety of processor +microarchitectures. + +0MQ is accessible from a large set of programming languages. + +0MQ is fully open sourced LGPL-licensed software. + + +CONTEXT +------- +Each 0MQ socket lives within a specific context. Creating and destroying +context is a counterpart of library initialisation/deinitialisation as used +elsewhere. Ability to create multiple contexts saves the day when an application +happens to link (indirectly and involuntarily) with several instances of 0MQ. + +Initialise 0MQ context:: + linkzmq:zmq_init[3] + +Uninitialise 0MQ context:: + linkzmq:zmq_term[3] + + +MESSAGES +-------- +Message is a discrete unit of data passed between applications or components +of the same application. 0MQ message has no internal structure, it is an opaque +BLOB. When writing data to or reading data from the message, you are free to +use any of the many serialisation libraries available. Alternatively, you can +use your own serialisation code. The latter option is especially useful when +migrating legacy applications to 0MQ - there's no need to break existing +message formats. + +Initialise a message:: + linkzmq:zmq_msg_init[3] + linkzmq:zmq_msg_size[3] + linkzmq:zmq_msg_data[3] + +Uninitialise a message:: + linkzmq:zmq_msg_close[3] + +Access message content:: + linkzmq:zmq_msg_data[3] + linkzmq:zmq_msg_size[3] + +Message manipulation:: + linkzmq:zmq_msg_copy[3] + linkzmq:zmq_msg_move[3] + + +SOCKETS +------- +0MQ sockets are very similar to POSIX sockets. See following manual pages to +understand them in depth. + +Creating a socket:: + linkzmq:zmq_socket[3] + +Closing a socket:: + linkzmq:zmq_close[3] + +Setting socket options:: + linkzmq:zmq_setsockopt[3] + +Establishing a message flow:: + linkzmq:zmq_bind[3] + linkzmq:zmq_connect[3] + +Sending & receiving messages:: + linkzmq:zmq_send[3] + linkzmq:zmq_flush[3] + linkzmq:zmq_recv[3] + + +MULTIPLEXING +------------ +0MQ allows you to handle multiple sockets (0MQ as well as standard POSIX) +in an asynchronous manner. + +Poll for I/O events:: + linkzmq:zmq_poll[3] + + +ERROR HANDLING +-------------- +0MQ defines couple of non-POSIX error codes. Use following functions to handle +them neatly. + +Convert error code into human readable string:: + linkzmq:zmq_strerror[3] + + +TRANSPORTS +---------- +0MQ allows for using different underlying transport mechanisms (even multiple +at once). Each transport mechanism has its own advantages and drawbacks. For +detailed description of individual mechanisms check following manual pages: + +TCP/IP transport:: + linkzmq:zmq_tcp[7] + +UDP reliable multicast transport:: + linkzmq:zmq_udp[7] + +PGM reliable multicast transport:: + linkzmq:zmq_pgm[7] + +Inter-process transport:: + linkzmq:zmq_ipc[7] + +In-process (inter-thread) transport:: + linkzmq:zmq_inproc[7] + + +DEVICES +------- +Aside of the messaging library (a.k.a. messaging kernel) 0MQ provides pre-built +executables - devices - to serve as middle nodes in complex messaging +topologies. For detailed description of individual devices check following +manual pages: + +Forwarder device for PUB/SUB messaging:: + linkzmq:zmq_forwarder[1] + +Streamer device for UPSTREAM/DOWNSTREAM messaging:: + linkzmq:zmq_streamer[1] + +Forwarder device for REQ/REP messaging:: + linkzmq:zmq_queue[1] + + +LANGUAGES +--------- +0MQ manual pages provide info on C API. To find out how the your +favourite language API maps to C API and thus how to find relevant manual pages, +see following articles: + +$$C++$$:: + linkzmq:zmq_cpp[7] + +Java:: + linkzmq:zmq_java[7] + +Python:: + linkzmq:zmq_python[7] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_bind.txt b/doc/zmq_bind.txt new file mode 100644 index 0000000..391238a --- /dev/null +++ b/doc/zmq_bind.txt @@ -0,0 +1,67 @@ +zmq_bind(3) +=========== + + +NAME +---- +zmq_bind - binds the socket to the specified address + + +SYNOPSIS +-------- +'int zmq_bind (void *s, const char *addr);' + + +DESCRIPTION +----------- +The function binds socket 's' to a particular transport. Actual semantics of the +command depend on the underlying transport mechanism, however, in cases where +peers connect in an asymmetric manner, 'zmq_bind' should be called first, +'zmq_connect' afterwards. Actual formats of 'addr' parameter are defined by +individual transports. For a list of supported transports have a look at +linkzmq:zmq[7] manual page. + +Note that single socket can be bound (and connected) to +arbitrary number of peers using different transport mechanisms. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +*EPROTONOSUPPORT*:: +unsupported protocol. +*ENOCOMPATPROTO*:: +protocol is not compatible with the socket type. +*EADDRINUSE*:: +the given address is already in use. +*EADDRNOTAVAIL*:: +a nonexistent interface was requested or the requested address was not local. + + +EXAMPLE +------- +---- +void *s = zmq_socket (context, ZMQ_PUB); +assert (s); +int rc = zmq_bind (s, "inproc://my_publisher"); +assert (rc == 0); +rc = zmq_bind (s, "tcp://eth0:5555"); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_connect[3] +linkzmq:zmq_socket[3] +linkzmq:zmq[7] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_close.txt b/doc/zmq_close.txt new file mode 100644 index 0000000..9964d36 --- /dev/null +++ b/doc/zmq_close.txt @@ -0,0 +1,52 @@ +zmq_close(3) +============ + + +NAME +---- +zmq_close - destroys 0MQ socket + + +SYNOPSIS +-------- +'int zmq_close (void *s);' + + +DESCRIPTION +----------- +Destroys 0MQ socket (one created using +'zmq_socket' function). All sockets have to be properly closed before the +application terminates, otherwise memory leaks will occur. Note that any +outbound messages that haven't been psuhed to the network yet and any inbound +messages that haven't been received by the application yet will be dropped on +the socket shutdown. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +int rc = zmq_close (s); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_socket[3] +linkzmq:zmq_term[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_connect.txt b/doc/zmq_connect.txt new file mode 100644 index 0000000..375873d --- /dev/null +++ b/doc/zmq_connect.txt @@ -0,0 +1,63 @@ +zmq_connect(3) +============== + + +NAME +---- +zmq_connect - connect the socket to the specified peer + + +SYNOPSIS +-------- +'int zmq_connect (void *s, const char *addr);' + + +DESCRIPTION +----------- +The function connect socket 's' to the peer identified by 'addr'. Actual +semantics of the command depend on the underlying transport mechanism, +however, in cases where peers connect in an asymmetric manner, 'zmq_bind' +should be called first, 'zmq_connect' afterwards. Formats of the 'addr' +parameter are defined by individual transports. For a list of supported +transports have a look at linkzmq:zmq[7] manual page. + +Note that single socket can be connected (and bound) to +arbitrary number of peers using different transport mechanisms. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +*EPROTONOSUPPORT*:: +unsupported protocol. +*ENOCOMPATPROTO*:: +protocol is not compatible with the socket type. + + +EXAMPLE +------- +---- +void *s = zmq_socket (context, ZMQ_SUB); +assert (s); +int rc = zmq_connect (s, "inproc://my_publisher"); +assert (rc == 0); +rc = zmq_connect (s, "tcp://server001:5555"); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_bind[3] +linkzmq:zmq_socket[3] +linkzmq:zmq[7] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_cpp.txt b/doc/zmq_cpp.txt new file mode 100644 index 0000000..8b58f2d --- /dev/null +++ b/doc/zmq_cpp.txt @@ -0,0 +1,89 @@ +zmq_cpp(7) +========== + + +NAME +---- +zmq_cpp - interface between 0MQ and C++ applications + + +SYNOPSIS +-------- +This manual page explains how C++ API maps to underlying C API. To learn about +individual functions and parameters check appropriate C API manual +pages. + +For example, to understand 'zmq::socket_t::setsockopt' function check +linkzmq:zmq_setsockopt[3]. + +All 0MQ constants defined with C API are available with C++ API. + + +zmq::context_t +-------------- +This class encapsulates the functions dealing with initialisation and +termination of 0MQ context. Constructor of the class invokes +linkzmq:zmq_init[3] while destructor calls linkzmq:zmq_term[3]. + + +zmq::socket_t +------------- +This class encapsulates all the functions to deal with 0MQ sockets. Constructor +calls linkzmq:zmq_socket[3], destructor calls linkzmq:zmq_close[3]. Other +functions of the class are mapped to C functions with corresponding names. +'zmq::socket_t::bind' calls linkzmq:zmq_bind[3] etc. + + +zmq::message_t +-------------- +This class encapsulates 'zmq_msg_t' structure and all the C functions that deal +with 0MQ messages. Constructors of the class invoke corresponding +initialisation functions linkzmq:zmq_msg_init[3], linkzmq:zmq_msg_init_size[3] +and linkzmq:zmq_msg_init_data[3], while destructor invokes +linkzmq:zmq_msg_close[3] function. + +Remaining functions are mapped to C functions with corresponding names. +For instance, 'zmq::message_t::copy' is mapped to linkzmq:zmq_msg_copy[3] +etc. + +C++ provides an additional function not available with C API. +'zmq::message_t::rebuild' is equivalent to calling linkzmq:zmq_close[3] +followed by linkzmq:zmq_msg_init[3], linkzmq:zmq_msg_init_size[3] or +linkzmq:zmq_msg_init_data[3]. It provides a way to reuse existing +'zmq::message_t' instances to store different message content. + + +zmq::error_t +------------ +All the errors reported using 'errno' mechanism in C API are automatically +converted to exceptions in C++ API. 'zmq::error_t' is derived from +'std::exception' and uses linkzmq:zmq_strerror[3] function to convert the error +code to human-readable string. + + +zmq::poll +--------- +'zmq::poll' function is a namespaced equivalent of raw C linkzmq:zmq_poll[3] +function. + + +EXAMPLE +------- +---- +zmq::context_t ctx (1, 1); +zmq::socket_t s (ctx, ZMQ_PUB); +s.connect ("tcp://192.168.0.115:5555"); +zmq::message_t msg (100); +memset (msg.data (), 0, 100); +s.send (msg); +---- + + +SEE ALSO +-------- +linkzmq:zmq[7] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_flush.txt b/doc/zmq_flush.txt new file mode 100644 index 0000000..3a2cd37 --- /dev/null +++ b/doc/zmq_flush.txt @@ -0,0 +1,59 @@ +zmq_flush(3) +============ + + +NAME +---- +zmq_flush - flushes pre-sent messages to the socket + + +SYNOPSIS +-------- +'int zmq_flush (void *s);' + + +DESCRIPTION +----------- +Flushes all the pre-sent messages - i.e. those that have been sent with +ZMQ_NOFLUSH flag - to the socket. This functionality improves performance in +cases where several messages are sent during a single business operation. +It should not be used as a transaction - ACID properties are not guaranteed. +Note that calling 'zmq_send' without ZMQ_NOFLUSH flag automatically flushes all +previously pre-sent messages. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +*ENOTSUP*:: +function isn't supported by particular socket type. +*EFSM*:: +function cannot be called at the moment, because socket is not in the +approprite state. + + +EXAMPLE +------- +---- +rc = zmq_send (s, &msg1, ZMQ_NOFLUSH); +assert (rc == 0); +rc = zmq_send (s, &msg2, ZMQ_NOFLUSH); +assert (rc == 0); +rc = zmq_flush (s); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_send[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_forwarder.txt b/doc/zmq_forwarder.txt new file mode 100644 index 0000000..17d938b --- /dev/null +++ b/doc/zmq_forwarder.txt @@ -0,0 +1,32 @@ +zmq_forwarder(1) +================ + + +NAME +---- +zmq_forwarder - forwards the stream of PUB/SUB messages + + +SYNOPSIS +-------- +* + + +DESCRIPTION +----------- +* + + +OPTIONS +------- +* + + +SEE ALSO +-------- +* + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_init.txt b/doc/zmq_init.txt new file mode 100644 index 0000000..6683d27 --- /dev/null +++ b/doc/zmq_init.txt @@ -0,0 +1,61 @@ +zmq_init(3) +=========== + + +NAME +---- +zmq_init - initialises 0MQ context + + +SYNOPSIS +-------- +'void *zmq_init (int app_threads, int io_threads, int flags);' + + +DESCRIPTION +----------- +Initialises 0MQ context. 'app_threads' specifies maximal number of application +threads that can own open sockets at the same time. At least one application +thread should be defined. 'io_threads' specifies the size of thread pool to +handle I/O operations. The value shouldn't be negative. Zero can be used in +case only in-process messaging is going to be used, i.e. there will be no I/O +traffic. + +The 'flags' argument is a combination of the flags defined below: + +*ZMQ_POLL*:: + flag specifying that the sockets within this context should be pollable + (see linkzmq:zmq_poll[3]). Pollable sockets may add a little latency to the + message transfer when compared to non-pollable sockets. + + +RETURN VALUE +------------ +Function returns context handle is successful. Otherwise it returns NULL and +sets errno to one of the values below. + + +ERRORS +------ +*EINVAL*:: + there's less than one application thread allocated, or number of I/O + threads is negative. + + +EXAMPLE +------- +---- +void *ctx = zmq_init (1, 1, ZMQ_POLL); +assert (ctx); +---- + + +SEE ALSO +-------- +linkzmq:zmq_term[3] +linkzmq:zmq_socket[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_inproc.txt b/doc/zmq_inproc.txt new file mode 100644 index 0000000..7861201 --- /dev/null +++ b/doc/zmq_inproc.txt @@ -0,0 +1,50 @@ +zmq_inproc(7) +============= + + +NAME +---- +zmq_inproc - 0MQ transport to pass messages between threads + + +SYNOPSIS +-------- +In-process transport is optimised for passing messages between threads in the +same process. + +Messages are passed directly from one application thread to +another application thread. There are no intervening I/O threads involved. +Thus, if you are using 0MQ for in-process messaging only, you can initialise +the library (linkzmq:zmq_init[3]) with zero I/O worker threads. + + +CONNECTION STRING +----------------- +Connection string for inproc transport is "inproc://" followed by an arbitrary +string. There are no restrictions on the string format: + +---- + inproc://my_endpoint + inproc://feeds/opra/cboe + inproc://feeds.opra.nasdaq + inproc://!&W#($)_@_123*((^^^ +---- + + +WIRE FORMAT +----------- +In-process transport transfers messages via memory thus there is no need for a +wire format specification. + + +SEE ALSO +-------- +linkzmq:zmq_ipc[7] +linkzmq:zmq_tcp[7] +linkzmq:zmq_udp[7] +linkzmq:zmq_pgm[7] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_ipc.txt b/doc/zmq_ipc.txt new file mode 100644 index 0000000..c3980f6 --- /dev/null +++ b/doc/zmq_ipc.txt @@ -0,0 +1,44 @@ +zmq_ipc(7) +========== + + +NAME +---- +zmq_ipc - 0MQ transport to pass messages between processes + + +SYNOPSIS +-------- +Inter-process transport is optimised for passing messages between processes on +the same physical machine. + + +CONNECTION STRING +----------------- +Connection string for inproc transport is "ipc://" followed by a file name. +The file will be used as placeholder for a message endpoint. (UNIX domain +sockets associate a file with the listening socket in a similar way.) + +---- + ipc:///tmp/my_ipc_endpoint + ipc:///tmp/prices.ipc +---- + + +WIRE FORMAT +----------- +IPC transport doesn't transfer messages across the network thus there is no need +for a wire format specification. + + +SEE ALSO +-------- +linkzmq:zmq_inproc[7] +linkzmq:zmq_tcp[7] +linkzmq:zmq_udp[7] +linkzmq:zmq_pgm[7] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_java.txt b/doc/zmq_java.txt new file mode 100644 index 0000000..c49e589 --- /dev/null +++ b/doc/zmq_java.txt @@ -0,0 +1,27 @@ +zmq_java(7) +=========== + + +NAME +---- +zmq_java - interface between 0MQ and Java applications + + +SYNOPSIS +-------- +* + + +DESCRIPTION +----------- +* + + +SEE ALSO +-------- +* + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_msg_close.txt b/doc/zmq_msg_close.txt new file mode 100644 index 0000000..1b043a2 --- /dev/null +++ b/doc/zmq_msg_close.txt @@ -0,0 +1,53 @@ +zmq_msg_close(3) +================ + + +NAME +---- +zmq_msg_close - destroys 0MQ message + + +SYNOPSIS +-------- +'int zmq_msg_close (zmq_msg_t *msg);' + + +DESCRIPTION +----------- +Deallocates message 'msg' including any associated buffers (unless the buffer +is shared with another message). Not calling this function can result in +memory leaks. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and sets +'errno' to the appropriate value. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +zmq_msg_t msg; +rc = zmq_msg_init_size (&msg, 1000000); +assert (rc = 0); +rc = zmq_msg_close (&msg); +assert (rc = 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_init_size[3] +linkzmq:zmq_msg_init_data[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_msg_copy.txt b/doc/zmq_msg_copy.txt new file mode 100644 index 0000000..b31897a --- /dev/null +++ b/doc/zmq_msg_copy.txt @@ -0,0 +1,60 @@ +zmq_msg_copy(3) +=============== + + +NAME +---- +zmq_msg_copy - copies content of a message to another message + + +SYNOPSIS +-------- +'int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src);' + + +DESCRIPTION +----------- +Copy the 'src' message to 'dest'. The original content of +'dest' is orderly deallocated. + +CAUTION: The implementation may choose not to physically copy the data, rather +to share the buffer between two messages. Thus avoid modifying message data +after the message was copied. Doing so can modify multiple message instances. +If what you need is actual hard copy, allocate new message using +'zmq_msg_size' and copy the data using 'memcpy'. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +zmq_msg_t dest; +rc = zmq_msg_init (&dest); +assert (rc == 0); +rc = zmq_msg_copy (&dest, &src); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_msg_move[3] +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_init_size[3] +linkzmq:zmq_msg_init_data[3] +linkzmq:zmq_msg_close[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_msg_data.txt b/doc/zmq_msg_data.txt new file mode 100644 index 0000000..45a99b1 --- /dev/null +++ b/doc/zmq_msg_data.txt @@ -0,0 +1,50 @@ +zmq_msg_data(3) +=============== + + +NAME +---- +zmq_msg_data - retrieves pointer to the message content + + +SYNOPSIS +-------- +'void *zmq_msg_data (zmq_msg_t *msg);' + + +DESCRIPTION +----------- +Returns pointer to message data. Always use this function to access the data, +never use 'zmq_msg_t' members directly. + + +RETURN VALUE +------------ +Pointer to the message data. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +zmq_msg_t msg; +rc = zmq_msg_init_size (&msg, 100); +memset (zmq_msg_data (&msg), 0, 100); +---- + + +SEE ALSO +-------- +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_init_size[3] +linkzmq:zmq_msg_init_data[3] +linkzmq:zmq_msg_close[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_msg_init.txt b/doc/zmq_msg_init.txt new file mode 100644 index 0000000..b080c18 --- /dev/null +++ b/doc/zmq_msg_init.txt @@ -0,0 +1,54 @@ +zmq_msg_init(3) +=============== + + +NAME +---- +zmq_msg_init - initialises empty 0MQ message + + +SYNOPSIS +-------- +'int zmq_msg_init (zmq_msg_t *msg);' + + +DESCRIPTION +----------- +Initialises 0MQ message zero bytes long. The function is most useful +to initialise a 'zmq_msg_t' structure before receiving a message. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +zmq_msg_t msg; +rc = zmq_msg_init (&msg); +assert (rc == 0); +rc = zmq_recv (s, &msg, 0); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_msg_close[3] +linkzmq:zmq_msg_init_size[3] +linkzmq:zmq_msg_init_data[3] +linkzmq:zmq_msg_data[3] +linkzmq:zmq_msg_size[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_msg_init_data.txt b/doc/zmq_msg_init_data.txt new file mode 100644 index 0000000..1ae6ce2 --- /dev/null +++ b/doc/zmq_msg_init_data.txt @@ -0,0 +1,67 @@ +zmq_msg_init_data(3) +==================== + + +NAME +---- +zmq_msg_init_data - initialises 0MQ message from the given data + + +SYNOPSIS +-------- +'typedef void (zmq_free_fn) (void *data, void *hint);' +'int zmq_msg_init_data (zmq_msg_t *msg, void *data, size_t size, zmq_free_fn *ffn, void *hint);' + + +DESCRIPTION +----------- +Initialise a message from a supplied buffer. Message isn't copied, +instead 0MQ infrastructure takes ownership of the buffer located at address +'data', 'size' bytes long. Deallocation function ('ffn') will be called once +the data are not needed anymore. When using a static constant buffer, 'ffn' may +be NULL to prevent subsequent deallocation. If needed, additional 'hint' can be +passed to the initialisation function. It's an opaque pointer that will be +later on passed to 'ffn' as a second argument. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +void my_free (void *data, void *hint) {free (data);} + + ... + +void *data = malloc (6); +assert (data); +memcpy (data, "ABCDEF", 6); +zmq_msg_t msg; +rc = zmq_msg_init_data (&msg, data, 6, my_free, NULL); +assert (rc == 0); +rc = zmq_send (s, &msg, 0); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_msg_close[3] +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_init_size[3] +linkzmq:zmq_msg_data[3] +linkzmq:zmq_msg_size[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_msg_init_size.txt b/doc/zmq_msg_init_size.txt new file mode 100644 index 0000000..9f09ade --- /dev/null +++ b/doc/zmq_msg_init_size.txt @@ -0,0 +1,61 @@ +zmq_msg_init_size(3) +==================== + + +NAME +---- +zmq_msg_init_size - initialises 0MQ message of a specified size + + +SYNOPSIS +-------- +'int zmq_msg_init_size (zmq_msg_t *msg, size_t size);' + + +DESCRIPTION +----------- +Initialises 0MQ message 'size' bytes long. The implementation chooses whether +it is more efficient to store message content on the stack (small messages) or +on the heap (large messages). Therefore, never access message data directly +via 'zmq_msg_t' members, rather use 'zmq_msg_data' and 'zmq_msg_size' functions +to get message data and size. Note that the message data are not nullified to +avoid the associated performance impact. Thus you should expect your message to +contain bogus data after this call. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +*ENOMEM*:: +memory to hold the message cannot be allocated. + + +EXAMPLE +------- +---- +zmq_msg_t msg; +rc = zmq_msg_init_size (&msg, 6); +assert (rc == 0); +memcpy (zmq_msg_data (&msg), "ABCDEF", 6); +rc = zmq_send (s, &msg, 0); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_msg_close[3] +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_init_data[3] +linkzmq:zmq_msg_data[3] +linkzmq:zmq_msg_size[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_msg_move.txt b/doc/zmq_msg_move.txt new file mode 100644 index 0000000..d8ce667 --- /dev/null +++ b/doc/zmq_msg_move.txt @@ -0,0 +1,55 @@ +zmq_msg_move(3) +=============== + + +NAME +---- +zmq_msg_move - moves content of a message to another message + + +SYNOPSIS +-------- +int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src); + + +DESCRIPTION +----------- +Move the content of the message from 'src' to 'dest'. The content isn't +copied, just moved. 'src' becomes an empty message after the call. Original +content of 'dest' message is deallocated. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +zmq_msg_t dest; +rc = zmq_msg_init (&dest); +assert (rc == 0); +rc = zmq_msg_move (&dest, &src); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_msg_copy[3] +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_init_size[3] +linkzmq:zmq_msg_init_data[3] +linkzmq:zmq_msg_close[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_msg_size.txt b/doc/zmq_msg_size.txt new file mode 100644 index 0000000..6d24243 --- /dev/null +++ b/doc/zmq_msg_size.txt @@ -0,0 +1,53 @@ +zmq_msg_size(3) +=============== + + +NAME +---- +zmq_msg_size - retrieves size of the message content + + +SYNOPSIS +-------- +'size_t zmq_msg_size (zmq_msg_t *msg);' + + +DESCRIPTION +----------- +Returns size of the message data. Always use this function to get the size, +never use 'zmq_msg_t' members directly. + + +RETURN VALUE +------------ +Size of the message data (bytes). + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +zmq_msg_t msg; +rc = zmq_msg_init (&msg); +assert (rc == 0); +rc = zmq_recv (s, &msg, 0); +assert (rc == 0); +size_t msg_size = zmq_msg_size (&msg); +---- + + +SEE ALSO +-------- +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_init_size[3] +linkzmq:zmq_msg_init_data[3] +linkzmq:zmq_msg_close[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_pgm.txt b/doc/zmq_pgm.txt new file mode 100644 index 0000000..d0e2622 --- /dev/null +++ b/doc/zmq_pgm.txt @@ -0,0 +1,106 @@ +zmq_pgm(7) +========== + + +NAME +---- +zmq_pgm - 0MQ PGM reliable multicast transport + + +SYNOPSIS +-------- +PGM is a protocol for reliable multicast (RFC3208). 0MQ's PGM transport allows +you to deliver messages to multiple destinations sending the data over +the network once only. It makes sense to use PGM transport if the data, +delivered to each destination separately, would seriously load or even overload +the network. + +PGM sending is rate limited rather than controlled by receivers. Thus, to get +optimal performance you should set ZMQ_RATE and ZMQ_RECOVERY_IVL socket options +prior to using PGM transport. Also note that passing multicast packets via +loopback interface has negative effect on the overall performance of the system. +Thus, if not needed, you should turn multicast loopback off using ZMQ_MCAST_LOOP +socket option. + +PGM transport can be used only with ZMQ_PUB and ZMQ_SUB sockets. + +CAUTION: PGM protocol runs directly on top of IP protocol and thus needs to +open raw IP socket. On some operating systems this operation requires special +privileges. On Linux, for example, you would need to either run your application +as root or set adequate capabilities for your executable. Alternative approach +is to use UDP transport, linkzmq:zmq_udp[7], that stacks PGM on top of UDP and +thus needs no special privileges. + + +CONNECTION STRING +----------------- +Connection string for PGM transport is "pgm://" followed by an IP address +of the NIC to use, semicolon, IP address of the multicast group, colon and +port number. IP address of the NIC can be either its numeric representation +or the name of the NIC as reported by operating system. IP address of the +multicast group should be specified in the numeric representation. For example: + +---- + pgm://eth0;224.0.0.1:5555 + pgm://lo;230.0.0.0:6666 + pgm://192.168.0.111;224.0.0.1:5555 +---- + +NOTE: NIC names are not standardised by POSIX. They tend to be rather arbitrary +and platform dependent. Say, "eth0" on Linux would correspond to "en0" on OSX +and "e1000g" on Solaris. On Windows platform, as there are no short NIC names +available, you have to use numeric IP addresses instead. + + +WIRE FORMAT +----------- +Consecutive PGM packets are interpreted as a single continuous stream of data. +The data is then split into messages using the wire format described in +linkzmq:zmq_tcp[7]. Thus, messages are not aligned with packet boundaries and +each message can start at an arbitrary position within the packet and span +several packets. + +Given this wire format, it would be impossible for late joining consumers to +identify message boundaries. To solve this problem, each PGM packet payload +starts with 16-bit unsigned integer in network byte order which specifies the +offset of the first message in the packet. If there's no beginning of a message +in the packet (it's a packet transferring inner part of a larger message) +the value of the initial integer is 0xFFFF. + +Each packet thus looks like this: + +---- ++-----------+------------+------------------+-------- +| IP header | PGM header | offset (16 bits) | data ..... ++-----------+------------+------------------+-------- +---- + +Following example shows how messages are arranged in subsequent packets: + +---- ++---------------+--------+-----------+-----------------------------+ +| PGM/IPheaders | 0x0000 | message 1 | message 2 (part 1) | ++---------------+--------+-----------+-----------------------------+ + ++---------------+--------+-----------------------------------------+ +| PGM/IPheaders | 0xFFFF | message 2 (part 2) | ++---------------+--------+-----------------------------------------+ + ++---------------+--------+--------------------------+-----------+ +| PGM/IPheaders | 0x0008 | message 2 (last 8 bytes) | message 3 | ++---------------+--------+--------------------------+-----------+ +---- + + +SEE ALSO +-------- +linkzmq:zmq_udp[7] +linkzmq:zmq_tcp[7] +linkzmq:zmq_ipc[7] +linkzmq:zmq_inproc[7] +linkzmq:zmq_setsockopt[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_poll.txt b/doc/zmq_poll.txt new file mode 100644 index 0000000..8e386bc --- /dev/null +++ b/doc/zmq_poll.txt @@ -0,0 +1,85 @@ +zmq_poll(3) +=========== + + +NAME +---- +zmq_poll - polls for events on a set of 0MQ and POSIX sockets + + +SYNOPSIS +-------- +'int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout);' + + +DESCRIPTION +----------- +Waits for the events specified by 'items' parameter. Number of items in the +array is determined by 'nitems' argument. Each item in the array looks like +this: + +---- +typedef struct +{ + void *socket; + int fd; + short events; + short revents; +} zmq_pollitem_t; +---- + +0MQ socket to poll on is specified by 'socket'. In case you want to poll on +standard POSIX socket, set 'socket' to NULL and fill the POSIX file descriptor +to 'fd'. 'events' specifies which events to wait for. It's a combination of +the values below. Once the call exits, 'revents' will be filled with events +that have actually occured on the socket. The field will contain a combination +of the values below. + +*ZMQ_POLLIN*:: +poll for incoming messages. +*ZMQ_POLLOUT*:: +wait while message can be set socket. Poll will return if a message of at least +one byte can be written to the socket. However, there is no guarantee that +arbitrarily large message can be sent. + +'timeout' argument specifies an upper limit on the time for which 'zmq_poll' +will block, in microseconds. Specifying a negative value in timeout means an +infinite timeout. + + +RETURN VALUE +------------ +Function returns number of items signaled or -1 in the case of error. + + +ERRORS +------ +*EFAULT*:: +there's a 0MQ socket in the pollset belonging to a different application thread. +*ENOTSUP*:: +0MQ context was initialised without ZMQ_POLL flag. I/O multiplexing is disabled. + + +EXAMPLE +------- +---- +zmq_pollitem_t items [2]; +items [0].socket = s; +items [0].events = ZMQ_POLLIN; +items [1].socket = NULL; +items [1].fd = my_fd; +items [1].events = ZMQ_POLLIN; + +int rc = zmq_poll (items, 2); +assert (rc != -1); +---- + + +SEE ALSO +-------- +linkzmq:zmq_socket[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_python.txt b/doc/zmq_python.txt new file mode 100644 index 0000000..7ad19a3 --- /dev/null +++ b/doc/zmq_python.txt @@ -0,0 +1,27 @@ +zmq_python(7) +============= + + +NAME +---- +zmq_python - interface between 0MQ and Python applications + + +SYNOPSIS +-------- +* + + +DESCRIPTION +----------- +* + + +SEE ALSO +-------- +* + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_queue.txt b/doc/zmq_queue.txt new file mode 100644 index 0000000..7f31ff9 --- /dev/null +++ b/doc/zmq_queue.txt @@ -0,0 +1,32 @@ +zmq_queue(1) +============ + + +NAME +---- +zmq_queue - forwards REQ/REP messages + + +SYNOPSIS +-------- +* + + +DESCRIPTION +----------- +* + + +OPTIONS +------- +* + + +SEE ALSO +-------- +* + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_recv.txt b/doc/zmq_recv.txt new file mode 100644 index 0000000..0365d23 --- /dev/null +++ b/doc/zmq_recv.txt @@ -0,0 +1,66 @@ +zmq_recv(3) +=========== + + +NAME +---- +zmq_recv - retrieves a message from the socket + + +SYNOPSIS +-------- +'int zmq_recv (void *s, zmq_msg_t *msg, int flags);' + + +DESCRIPTION +----------- +Receive a message from the socket 's', store it in +'msg' . Any content previously in 'msg' will be properly deallocated. 'flags' +argument can be combination of the flags described below. + +*ZMQ_NOBLOCK*:: +The flag specifies that the operation should be performed in +non-blocking mode. I.e. if it cannot be processed immediately, +error should be returned with 'errno' set to EAGAIN. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +*EAGAIN*:: +it's a non-blocking receive and there's no message available at the moment. +*ENOTSUP*:: +function isn't supported by particular socket type. +*EFSM*:: +function cannot be called at the moment, because socket is not in the +appropriate state. This error may occur with sockets that switch between +several states (e.g. ZMQ_REQ). + + +EXAMPLE +------- +---- +zmq_msg_t msg; +int rc = zmq_msg_init (&msg); +assert (rc == 0); +rc = zmq_recv (s, &msg, 0); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_send[3] +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_data[3] +linkzmq:zmq_msg_size[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_send.txt b/doc/zmq_send.txt new file mode 100644 index 0000000..f6a35c5 --- /dev/null +++ b/doc/zmq_send.txt @@ -0,0 +1,77 @@ +zmq_send(3) +=========== + + +NAME +---- +zmq_send - sends a message + + +SYNOPSIS +-------- +'int zmq_send (void *s, zmq_msg_t *msg, int flags);' + + +DESCRIPTION +----------- +Send the message 'msg' to the socket 's'. 'flags' argument can be combination +the flags described below. + +*ZMQ_NOBLOCK*:: +The flag specifies that the operation should be performed in non-blocking mode. +I.e. if it cannot be processed immediately, error should be returned with +'errno' set to EAGAIN. + +*ZMQ_NOFLUSH*:: +The flag specifies that 'zmq_send' should not flush the message downstream +immediately. Instead, it should batch ZMQ_NOFLUSH messages and send them +downstream only once 'zmq_flush' is invoked. This is an optimisation for cases +where several messages are sent in a single business transaction. However, the +effect is measurable only in extremely high-perf scenarios (million messages a +second or so). If that's not your case, use standard flushing send instead. + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +*EAGAIN*:: +it's a non-blocking send and message cannot be sent at the moment. +*ENOTSUP*:: +function isn't supported by particular socket type. +*EFSM*:: +function cannot be called at the moment, because socket is not in the +appropriate state. This error may occur with sockets that switch between +several states (e.g. ZMQ_REQ). + + +EXAMPLE +------- +---- +zmq_msg_t msg; +int rc = zmq_msg_init_size (&msg, 6); +assert (rc == 0); +memset (zmq_msg_data (&msg), 'A', 6); +rc = zmq_send (s, &msg, 0); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_flush[3] +linkzmq:zmq_recv[3] +linkzmq:zmq_msg_init[3] +linkzmq:zmq_msg_init_size[3] +linkzmq:zmq_msg_init_data[3] +linkzmq:zmq_msg_data[3] +linkzmq:zmq_msg_size[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_setsockopt.txt b/doc/zmq_setsockopt.txt new file mode 100644 index 0000000..549a2de --- /dev/null +++ b/doc/zmq_setsockopt.txt @@ -0,0 +1,155 @@ +zmq_setsockopt(3) +================= + + +NAME +---- + +zmq_setsockopt - sets a specified option on a 0MQ socket + + +SYNOPSIS +-------- +'int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen);' + + +DESCRIPTION +----------- +Sets an option on the socket. 'option' argument specifies the option from the +list below. 'optval' is a pointer to the value to set, 'optvallen' is the size +of the value in bytes. + +*ZMQ_HWM*:: +High watermark for the message pipes associated with the socket. The water +mark cannot be exceeded. If the messages don't fit into the pipe emergency +mechanisms of the particular socket type are used (block, drop etc.) If HWM +is set to zero, there are no limits for the content of the pipe. ++ +Type: int64_t Unit: messages Default: 0 + +*ZMQ_LWM*:: +Low watermark makes sense only if high watermark is defined (i.e. is non-zero). +When the emergency state is reached when messages overflow the pipe, the +emergency lasts at most till the size of the pipe decreases to low watermark. +Normal state is resumed at that point. ++ +Type: int64_t Unit: messages Default: 0 + +*ZMQ_SWAP*:: +Swap allows the pipe to exceed high watermark. However, the data are written +to the disk rather than held in the memory. Until high watermark is +exceeded there is no disk activity involved though. The value of the option +defines maximal size of the swap file. ++ +Type: int64_t Unit: bytes Default: 0 + +*ZMQ_AFFINITY*:: +Affinity defines which threads in the thread pool will be used to handle +newly created sockets. This way you can dedicate some of the threads (CPUs) +to a specific work. Value of 0 means no affinity. Work is distributed +fairly among the threads in the thread pool. For non-zero values, the lowest +bit corresponds to the thread 1, second lowest bit to the thread 2 etc. +Thus, value of 3 means that from now on newly created sockets will handle +I/O activity exclusively using threads no. 1 and 2. ++ +Type: int64_t Unit: N/A (bitmap) Default: 0 + +*ZMQ_IDENTITY*:: +Identity of the socket. Identity is important when restarting applications. +If the socket has no identity, each run of the application is completely +separated from other runs. However, with identity application reconnects to +existing infrastructure left by the previous run. Thus it may receive +messages that were sent in the meantime, it shares pipe limits with the +previous run etc. ++ +Type: string Unit: N/A Default: NULL + +*ZMQ_SUBSCRIBE*:: +Applicable only to ZMQ_SUB socket type. It establishes new message filter. +When ZMQ_SUB socket is created all the incoming messages are filtered out. +This option allows you to subscribe for all messages (""), or messages +beginning with specific prefix (e.g. "animals.mammals.dogs."). Multiple +filters can be attached to a single 'sub' socket. In that case message passes +if it matches at least one of the filters. ++ +Type: string Unit: N/A Default: N/A + +*ZMQ_UNSUBSCRIBE*:: +Applicable only to ZMQ_SUB socket type. Removes existing message filter. +The filter specified must match the string passed to ZMQ_SUBSCRIBE options +exactly. If there were several instances of the same filter created, +this options removes only one of them, leaving the rest in place +and functional. ++ +Type: string Unit: N/A Default: N/A + +*ZMQ_RATE*:: +This option applies only to sending side of multicast transports (pgm & udp). +It specifies maximal outgoing data rate that an individual sender socket +can send. ++ +Type: uint64_t Unit: kilobits/second Default: 100 + +*ZMQ_RECOVERY_IVL*:: +This option applies only to multicast transports (pgm & udp). It specifies +how long can the receiver socket survive when the sender is inaccessible. +Keep in mind that large recovery intervals at high data rates result in +very large recovery buffers, meaning that you can easily overload your box +by setting say 1 minute recovery interval at 1Gb/s rate (requires +7GB in-memory buffer). ++ +Type: uint64_t Unit: seconds Default: 10 + +*ZMQ_MCAST_LOOP*:: +This option applies only to multicast transports (pgm & udp). Value of 1 +means that the mutlicast packets can be received on the box they were sent +from. Setting the value to 0 disables the loopback functionality which +can have negative impact on the performance. If possible, disable +the loopback in production environments. ++ +Type: uint64_t Unit: N/A (boolean value) Default: 1 + +*ZMQ_SNDBUF*:: +Sets the underlying kernel transmit buffer size to the specified size. See +'SO_SNDBUF' POSIX socket option. Value of zero means leaving the OS default +unchanged. ++ +Type: uint64_t Unit: bytes Default: 0 + +*ZMQ_RCVBUF*:: +Sets the underlying kernel receive buffer size to the specified size. See +'SO_RCVBUF' POSIX socket option. Value of zero means leaving the OS default +unchanged. ++ +Type: uint64_t Unit: bytes Default: 0 + + +RETURN VALUE +------------ +In case of success the function returns zero. Otherwise it returns -1 and +sets 'errno' to the appropriate value. + + +ERRORS +------ +*EINVAL*:: +unknown option, a value with incorrect length or invalid value. + + +EXAMPLE +------- +---- +int rc = zmq_setsockopt (s, ZMQ_SUBSCRIBE, "", 0); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_socket[3] +linkzmq:zmq[7] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_socket.txt b/doc/zmq_socket.txt new file mode 100644 index 0000000..6cfc726 --- /dev/null +++ b/doc/zmq_socket.txt @@ -0,0 +1,126 @@ +zmq_socket(3) +============= + + +NAME +---- +zmq_socket - creates 0MQ socket + + +SYNOPSIS +-------- +'void *zmq_socket (void *context, int type);' + + +DESCRIPTION +----------- +Open a socket within the specified 'context'. To create a context, use +'zmq_init' function. 'type' argument can be one of the values defined below. +Note that each socket is owned by exactly one thread (the one that it was +created from) and should not be used from any other thread. + +*ZMQ_P2P*:: +Socket to communicate with a single peer. Allows for only a single connect +or a single bind. There's no message routing or message filtering involved. ++ +Compatible peer sockets: ZMQ_P2P. + +*ZMQ_PUB*:: +Socket to distribute data. Recv function is not implemented for this socket +type. Messages are distributed in fanout fashion to all the peers. ++ +Compatible peer sockets: ZMQ_SUB. + +*ZMQ_SUB*:: +Socket to subscribe for data. Send function is not implemented for this socket +type. Initially, socket is subscribed for no messages. Use ZMQ_SUBSCRIBE option +to specify which messages to subscribe for. ++ +Compatible peer sockets: ZMQ_PUB. + +*ZMQ_REQ*:: +Socket to send requests and receive replies. Requests are load-balanced among +all the peers. This socket type allows only an alternated sequence of send's +and recv's. ++ +Compatible peer sockets: ZMQ_REP, ZMQ_XREP. + +*ZMQ_REP*:: +Socket to receive requests and send replies. This socket type allows only an +alternated sequence of recv's and send's. Each send is routed to the peer that +issued the last received request. ++ +Compatible peer sockets: ZMQ_REQ, ZMQ_XREQ. + +*ZMQ_XREQ*:: +Special socket type to be used in request/reply middleboxes such as +linkzmq:zmq_queue[7]. Requests forwarded using this socket type should be +tagged by a proper prefix identifying the original requester. Replies received +by this socket are tagged with a proper postfix that can be use to route the +reply back to the original requester. ++ +Compatible peer sockets: ZMQ_REP, ZMQ_XREP. + +*ZMQ_XREP*:: +Special socket type to be used in request/reply middleboxes such as +linkzmq:zmq_queue[7]. Requests received using this socket are already properly +tagged with prefix identifying the original requester. When sending a reply via +XREP socket the message should be tagged with a prefix from a corresponding +request. ++ +Compatible peer sockets: ZMQ_REQ, ZMQ_XREQ. + +*ZMQ_UPSTREAM*:: +Socket to receive messages from up the stream. Messages are fair-queued from +among all the connected peers. Send function is not implemented for this socket +type. ++ +Compatible peer sockets: ZMQ_DOWNSTREAM. + +*ZMQ_DOWNSTREAM*:: +Socket to send messages down stream. Messages are load-balanced among all the +connected peers. Recv function is not implemented for this socket type. ++ +Compatible peer sockets: ZMQ_UPSTREAM. + + +RETURN VALUE +------------ +Function returns socket handle is successful. Otherwise it returns NULL and +sets errno to one of the values below. + + +ERRORS +------ +*EINVAL*:: + invalid socket type. + +*EMTHREAD*:: + the number of application threads allowed to own 0MQ sockets was exceeded. + See 'app_threads' parameter to 'zmq_init' function. + + +EXAMPLE +------- +---- +void *s = zmq_socket (context, ZMQ_PUB); +assert (s); +int rc = zmq_bind (s, "tcp://192.168.0.1:5555"); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_init[3] +linkzmq:zmq_setsockopt[3] +linkzmq:zmq_bind[3] +linkzmq:zmq_connect[3] +linkzmq:zmq_send[3] +linkzmq:zmq_flush[3] +linkzmq:zmq_recv[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_streamer.txt b/doc/zmq_streamer.txt new file mode 100644 index 0000000..d0df514 --- /dev/null +++ b/doc/zmq_streamer.txt @@ -0,0 +1,32 @@ +zmq_streamer(1) +=============== + + +NAME +---- +zmq_streamer - forwards the stream of UPSTREAM/DOWNSTREAM messages + + +SYNOPSIS +-------- +* + + +DESCRIPTION +----------- +* + + +OPTIONS +------- +* + + +SEE ALSO +-------- +* + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_strerror.txt b/doc/zmq_strerror.txt new file mode 100644 index 0000000..2bdf762 --- /dev/null +++ b/doc/zmq_strerror.txt @@ -0,0 +1,50 @@ +zmq_strerror(3) +=============== + + +NAME +---- +zmq_strerror - returns string describing the error number + + +SYNOPSIS +-------- +'const char *zmq_strerror (int errnum);' + + +DESCRIPTION +----------- +As 0MQ defines few additional (non-POSIX) error codes, standard +'strerror' isn't capable of translating those errors into human readable +strings. Instead, 'zmq_strerror' should be used. + + +RETURN VALUE +------------ +Returns string describing the error number. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +void *ctx = zmq_init (1, 1, 0); +if (!ctx) { + printf ("error occured during zmq_init: %s\\n", zmq_strerror (errno)); + abort (); +} +---- + + +SEE ALSO +-------- +linkzmq:zmq[7] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_tcp.txt b/doc/zmq_tcp.txt new file mode 100644 index 0000000..98f1219 --- /dev/null +++ b/doc/zmq_tcp.txt @@ -0,0 +1,93 @@ +zmq_tcp(7) +========== + + +NAME +---- +zmq_tcp - 0MQ unicast TCP transport over the network + + +SYNOPSIS +-------- +TCP is an ubiquitous unicast transport. When connecting distributed +applications, you will mostly use TCP transport. + + +CONNECTION STRING +----------------- +Connection string for TCP transport is "tcp://" followed by an IP address, +colon and port number. IP address can be either its numeric representation, +a NIC name or a hostname (resolved by DNS): + +---- + tcp://192.168.0.111:5555 + tcp://myserver001:80 + tcp://lo:32768 +---- + +Note that NIC names are not standardised by POSIX. They tend to be rather +arbitrary and platform dependent. Say, "eth0" on Linux would correspond to "en0" +on OSX and "e1000g" on Solaris. On Windows platform, as there are no short NIC +names available, you have to use numeric IP addresses instead. + + +WIRE FORMAT +----------- +A message consists of a message length followed by message data. +Size of message data MUST correspond to the message length. + +For messages of 0 to 254 octets, the length is represented by single octet. + +For messages of 255 or more octets the length is represented by a single octet +%xFF followed by a 64-bit unsigned integer length in network byte order. + +The protocol can be defined by this BNF grammar: + +---- + frame = length data + length = OCTET | escape 8*OCTET + escape = %xFF + data = *OCTET +---- + +Binary layout of a message (up to 254 bytes long): + +---- +0 1 2 3 +0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Message size | Message body ... | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Message body ... ++-+-+-+-+-+-+- ... +---- + +Binary layout of a larger message: + +---- +0 1 2 3 +0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| 0xff | Message size ... | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Message size ... | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Message size | Message body ... | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Message body ... ++-+-+-+-+-+-+-+ ... +---- + + +SEE ALSO +-------- +linkzmq:zmq_udp[7] +linkzmq:zmq_pgm[7] +linkzmq:zmq_ipc[7] +linkzmq:zmq_inproc[7] + + +AUTHOR +------ +Martin Sustrik + diff --git a/doc/zmq_term.txt b/doc/zmq_term.txt new file mode 100644 index 0000000..451c1ac --- /dev/null +++ b/doc/zmq_term.txt @@ -0,0 +1,49 @@ +zmq_term(3) +=========== + + +NAME +---- +zmq_term - terminates 0MQ context + + +SYNOPSIS +-------- +'int zmq_term (void *context);' + + +DESCRIPTION +----------- +Destroys 0MQ context. However, if there are still any sockets open within +the context, 'zmq_term' succeeds but shutdown of the context is delayed till +the last socket is closed. + + +RETURN VALUE +------------ +Function returns zero is successful. Otherwise it returns -1 and sets errno to +one of the values below. + + +ERRORS +------ +No errors are defined. + + +EXAMPLE +------- +---- +int rc = zmq_term (context); +assert (rc == 0); +---- + + +SEE ALSO +-------- +linkzmq:zmq_init[3] +linkzmq:zmq_close[3] + + +AUTHOR +------ +Martin Sustrik diff --git a/doc/zmq_udp.txt b/doc/zmq_udp.txt new file mode 100644 index 0000000..ecc6bdf --- /dev/null +++ b/doc/zmq_udp.txt @@ -0,0 +1,56 @@ +zmq_udp(7) +========== + + +NAME +---- +zmq_udp - 0MQ reliable multicast transport using UDP + + +SYNOPSIS +-------- +UDP transport is exactly the same as PGM transport except that PGM packets +are encapsulated in UDP packets. Rationale for this transport is that user-space +implementation of PGM requires right to create raw sockets (PGM is located +directly on top of IP layer in the networking stack), which is often not +available. UDP encapsulation solves this problem, however, it adds some overhead +related to creating and transferring UDP packet headers. + + +CONNECTION STRING +----------------- +Connection string for UDP transport is "udp://" followed by an IP address +of the NIC to use, semicolon, IP address of the multicast group, colon and +port number. IP address of the NIC can be either its numeric representation +or the name of the NIC as reported by operating system. IP address of the +multicast group should be specified in the numeric representation. For example: + +---- + udp://eth0;224.0.0.1:5555 + udp://lo;230.0.0.0:6666 + udp://192.168.0.111;224.0.0.1:5555 +---- + +NOTE: NIC names are not standardised by POSIX. They tend to be rather +arbitrary and platform dependent. Say, "eth0" on Linux would correspond to "en0" +on OSX and "e1000g" on Solaris. On Windows platform, as there are no short NIC +names available, you have to use numeric IP addresses instead. + + +WIRE FORMAT +----------- +Same as with PGM transport except for UDP packet headers. + + +SEE ALSO +-------- +linkzmq:zmq_pgm[7] +linkzmq:zmq_tcp[7] +linkzmq:zmq_ipc[7] +linkzmq:zmq_inproc[7] + + +AUTHOR +------ +Martin Sustrik + diff --git a/man/Makefile.am b/man/Makefile.am deleted file mode 100644 index 6a39af2..0000000 --- a/man/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -dist_man_MANS = man1/zmq_forwarder.1 man1/zmq_streamer.1 man1/zmq_queue.1 \ - man3/zmq_init.3 man3/zmq_term.3 \ - man3/zmq_socket.3 man3/zmq_close.3 man3/zmq_setsockopt.3 man3/zmq_bind.3 \ - man3/zmq_connect.3 man3/zmq_send.3 man3/zmq_flush.3 man3/zmq_recv.3 \ - man3/zmq_poll.3 man3/zmq_msg_init.3 man3/zmq_msg_init_size.3 \ - man3/zmq_msg_close.3 man3/zmq_msg_move.3 man3/zmq_msg_copy.3 \ - man3/zmq_msg_data.3 man3/zmq_msg_size.3 man3/zmq_strerror.3 \ - man7/zmq.7 man7/zmq_cpp.7 man7/zmq_python.7 \ - man7/zmq_cl.7 man7/zmq_tcp.7 man7/zmq_udp.7 man7/zmq_pgm.7 \ - man7/zmq_inproc.7 man7/zmq_ipc.7 man7/zmq_java.7 - -distclean-local: - -rm *.pdf - -rm man1/*.ps - -rm man3/*.ps - -rm man7/*.ps - -dist-hook: - ./convert2pdf.sh - $(mkdir_p) $(top_distdir)/doc - cp $(top_srcdir)/man/*.pdf $(top_distdir)/doc - diff --git a/man/convert2html.sh b/man/convert2html.sh deleted file mode 100644 index 40617da..0000000 --- a/man/convert2html.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2007-2010 iMatix Corporation -# -# This file is part of 0MQ. -# -# 0MQ is free software; you can redistribute it and/or modify it under -# the terms of the Lesser GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# 0MQ is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# Lesser GNU General Public License for more details. -# -# You should have received a copy of the Lesser GNU General Public License -# along with this program. If not, see . - -groff -man -Thtml man1/zmq_forwarder.1 > man1/zmq_forwarder.1.html -groff -man -Thtml man1/zmq_streamer.1 > man1/zmq_streamer.1.html -groff -man -Thtml man1/zmq_queue.1 > man1/zmq_queue.1.html - -groff -man -Thtml man3/zmq_init.3 > man3/zmq_init.3.html -groff -man -Thtml man3/zmq_term.3 > man3/zmq_term.3.html -groff -man -Thtml man3/zmq_socket.3 > man3/zmq_socket.3.html -groff -man -Thtml man3/zmq_close.3 > man3/zmq_close.3.html -groff -man -Thtml man3/zmq_setsockopt.3 > man3/zmq_setsockopt.3.html -groff -man -Thtml man3/zmq_bind.3 > man3/zmq_bind.3.html -groff -man -Thtml man3/zmq_connect.3 > man3/zmq_connect.3.html -groff -man -Thtml man3/zmq_send.3 > man3/zmq_send.3.html -groff -man -Thtml man3/zmq_flush.3 > man3/zmq_flush.3.html -groff -man -Thtml man3/zmq_recv.3 > man3/zmq_recv.3.html -groff -man -Thtml man3/zmq_poll.3 > man3/zmq_poll.3.html -groff -man -Thtml man3/zmq_msg_init.3 > man3/zmq_msg_init.3.html -groff -man -Thtml man3/zmq_msg_init_size.3 > man3/zmq_msg_init_size.3.html -groff -man -Thtml man3/zmq_msg_init_data.3 > man3/zmq_msg_init_data.3.html -groff -man -Thtml man3/zmq_msg_close.3 > man3/zmq_msg_close.3.html -groff -man -Thtml man3/zmq_msg_move.3 > man3/zmq_msg_move.3.html -groff -man -Thtml man3/zmq_msg_copy.3 > man3/zmq_msg_copy.3.html -groff -man -Thtml man3/zmq_msg_data.3 > man3/zmq_msg_data.3.html -groff -man -Thtml man3/zmq_msg_size.3 > man3/zmq_msg_size.3.html -groff -man -Thtml man3/zmq_strerror.3 > man3/zmq_strerror.3.html - -groff -man -Thtml man7/zmq.7 > man7/zmq.7.html -groff -man -Thtml man7/zmq_cpp.7 > man7/zmq_cpp.7.html -groff -man -Thtml man7/zmq_java.7 > man7/zmq_java.7.html -groff -man -Thtml man7/zmq_python.7 > man7/zmq_python.7.html -groff -man -Thtml man7/zmq_cl.7 > man7/zmq_cl.7.html -groff -man -Thtml man7/zmq_tcp.7 > man7/zmq_tcp.7.html -groff -man -Thtml man7/zmq_udp.7 > man7/zmq_udp.7.html -groff -man -Thtml man7/zmq_pgm.7 > man7/zmq_pgm.7.html -groff -man -Thtml man7/zmq_inproc.7 > man7/zmq_inproc.7.html -groff -man -Thtml man7/zmq_ipc.7 > man7/zmq_ipc.7.html - diff --git a/man/convert2pdf.sh b/man/convert2pdf.sh deleted file mode 100755 index 574571b..0000000 --- a/man/convert2pdf.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2007-2010 iMatix Corporation -# -# This file is part of 0MQ. -# -# 0MQ is free software; you can redistribute it and/or modify it under -# the terms of the Lesser GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# 0MQ is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# Lesser GNU General Public License for more details. -# -# You should have received a copy of the Lesser GNU General Public License -# along with this program. If not, see . - -groff -man -Tps man1/zmq_forwarder.1 > man1/zmq_forwarder.1.ps -ps2pdf man1/zmq_forwarder.1.ps zmq_forwarder.pdf -groff -man -Tps man1/zmq_streamer.1 > man1/zmq_streamer.1.ps -ps2pdf man1/zmq_streamer.1.ps zmq_streamer.pdf -groff -man -Tps man1/zmq_queue.1 > man1/zmq_queue.1.ps -ps2pdf man1/zmq_queue.1.ps zmq_queue.pdf - -groff -man -Tps man3/zmq_init.3 > man3/zmq_init.3.ps -ps2pdf man3/zmq_init.3.ps zmq_init.pdf -groff -man -Tps man3/zmq_term.3 > man3/zmq_term.3.ps -ps2pdf man3/zmq_term.3.ps zmq_term.pdf -groff -man -Tps man3/zmq_socket.3 > man3/zmq_socket.3.ps -ps2pdf man3/zmq_socket.3.ps zmq_socket.pdf -groff -man -Tps man3/zmq_close.3 > man3/zmq_close.3.ps -ps2pdf man3/zmq_close.3.ps zmq_close.pdf -groff -man -Tps man3/zmq_setsockopt.3 > man3/zmq_setsockopt.3.ps -ps2pdf man3/zmq_setsockopt.3.ps zmq_setsockopt.pdf -groff -man -Tps man3/zmq_bind.3 > man3/zmq_bind.3.ps -ps2pdf man3/zmq_bind.3.ps zmq_bind.pdf -groff -man -Tps man3/zmq_connect.3 > man3/zmq_connect.3.ps -ps2pdf man3/zmq_connect.3.ps zmq_connect.pdf -groff -man -Tps man3/zmq_send.3 > man3/zmq_send.3.ps -ps2pdf man3/zmq_send.3.ps zmq_send.pdf -groff -man -Tps man3/zmq_flush.3 > man3/zmq_flush.3.ps -ps2pdf man3/zmq_flush.3.ps zmq_flush.pdf -groff -man -Tps man3/zmq_recv.3 > man3/zmq_recv.3.ps -ps2pdf man3/zmq_recv.3.ps zmq_recv.pdf -groff -man -Tps man3/zmq_poll.3 > man3/zmq_poll.3.ps -ps2pdf man3/zmq_poll.3.ps zmq_poll.pdf -groff -man -Tps man3/zmq_msg_init.3 > man3/zmq_msg_init.3.ps -ps2pdf man3/zmq_msg_init.3.ps zmq_msg_init.pdf -groff -man -Tps man3/zmq_msg_init_size.3 > man3/zmq_msg_init_size.3.ps -ps2pdf man3/zmq_msg_init_size.3.ps zmq_msg_init_size.pdf -groff -man -Tps man3/zmq_msg_init_data.3 > man3/zmq_msg_init_data.3.ps -ps2pdf man3/zmq_msg_init_data.3.ps zmq_msg_init_data.pdf -groff -man -Tps man3/zmq_msg_close.3 > man3/zmq_msg_close.3.ps -ps2pdf man3/zmq_msg_close.3.ps zmq_msg_close.pdf -groff -man -Tps man3/zmq_msg_move.3 > man3/zmq_msg_move.3.ps -ps2pdf man3/zmq_msg_move.3.ps zmq_msg_move.pdf -groff -man -Tps man3/zmq_msg_copy.3 > man3/zmq_msg_copy.3.ps -ps2pdf man3/zmq_msg_copy.3.ps zmq_msg_copy.pdf -groff -man -Tps man3/zmq_msg_data.3 > man3/zmq_msg_data.3.ps -ps2pdf man3/zmq_msg_data.3.ps zmq_msg_data.pdf -groff -man -Tps man3/zmq_msg_size.3 > man3/zmq_msg_size.3.ps -ps2pdf man3/zmq_msg_size.3.ps zmq_msg_size.pdf -groff -man -Tps man3/zmq_strerror.3 > man3/zmq_strerror.3.ps -ps2pdf man3/zmq_strerror.3.ps zmq_strerror.pdf - -groff -man -Tps man7/zmq.7 > man7/zmq.7.ps -ps2pdf man7/zmq.7.ps zmq.pdf -groff -man -Tps man7/zmq_cpp.7 > man7/zmq_cpp.7.ps -ps2pdf man7/zmq_cpp.7.ps zmq_cpp.pdf -groff -man -Tps man7/zmq_java.7 > man7/zmq_java.7.ps -ps2pdf man7/zmq_java.7.ps zmq_java.pdf -groff -man -Tps man7/zmq_python.7 > man7/zmq_python.7.ps -ps2pdf man7/zmq_python.7.ps zmq_python.pdf -groff -man -Tps man7/zmq_cl.7 > man7/zmq_cl.7.ps -ps2pdf man7/zmq_cl.7.ps zmq_cl.pdf -groff -man -Tps man7/zmq_tcp.7 > man7/zmq_tcp.7.ps -ps2pdf man7/zmq_tcp.7.ps zmq_tcp.pdf -groff -man -Tps man7/zmq_udp.7 > man7/zmq_udp.7.ps -ps2pdf man7/zmq_udp.7.ps zmq_udp.pdf -groff -man -Tps man7/zmq_pgm.7 > man7/zmq_pgm.7.ps -ps2pdf man7/zmq_pgm.7.ps zmq_pgm.pdf -groff -man -Tps man7/zmq_inproc.7 > man7/zmq_inproc.7.ps -ps2pdf man7/zmq_inproc.7.ps zmq_inproc.pdf -groff -man -Tps man7/zmq_ipc.7 > man7/zmq_ipc.7.ps -ps2pdf man7/zmq_ipc.7.ps zmq_ipc.pdf - diff --git a/man/man1/zmq_forwarder.1 b/man/man1/zmq_forwarder.1 deleted file mode 100644 index b45d9c8..0000000 --- a/man/man1/zmq_forwarder.1 +++ /dev/null @@ -1,11 +0,0 @@ -.TH zmq_forwarder 1 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_forwarder \- forwards the stream of PUB/SUB messages -.SH SYNOPSIS -.SH DESCRIPTION -.SH OPTIONS -.SH "SEE ALSO" -.SH AUTHOR -Martin Sustrik - - diff --git a/man/man1/zmq_queue.1 b/man/man1/zmq_queue.1 deleted file mode 100644 index da29d86..0000000 --- a/man/man1/zmq_queue.1 +++ /dev/null @@ -1,11 +0,0 @@ -.TH zmq_queue 1 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_queue \- forwards REQ/REP messages -.SH SYNOPSIS -.SH DESCRIPTION -.SH OPTIONS -.SH "SEE ALSO" -.SH AUTHOR -Martin Sustrik - - diff --git a/man/man1/zmq_streamer.1 b/man/man1/zmq_streamer.1 deleted file mode 100644 index deadc65..0000000 --- a/man/man1/zmq_streamer.1 +++ /dev/null @@ -1,11 +0,0 @@ -.TH zmq_streamer 1 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_streamer \- forwards the stream of UPSTREAM/DOWNSTREAM messages -.SH SYNOPSIS -.SH DESCRIPTION -.SH OPTIONS -.SH "SEE ALSO" -.SH AUTHOR -Martin Sustrik - - diff --git a/man/man3/zmq_bind.3 b/man/man3/zmq_bind.3 deleted file mode 100644 index 61d97fa..0000000 --- a/man/man3/zmq_bind.3 +++ /dev/null @@ -1,52 +0,0 @@ -.TH zmq_bind 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_bind \- binds the socket to the specified address -.SH SYNOPSIS -.B int zmq_bind (void *s, const char *addr); -.SH DESCRIPTION -The function binds socket -.IR s -to a particular transport. Actual semantics of the -command depend on the underlying transport mechanism, however, in cases where -peers connect in an asymmetric manner, -.IR zmq_bind -should be called first, -.IR zmq_connect -afterwards. Actual formats of -.IR addr -parameter are defined by individual transports. For a list of supported -transports have a look at -.IR zmq(7) -manual page. - -Note that single socket can be bound (and connected) to -arbitrary number of peers using different transport mechanisms. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -.IP "\fBEPROTONOSUPPORT\fP" -unsupported protocol. -.IP "\fBENOCOMPATPROTO\fP" -protocol is not compatible with the socket type. -.IP "\fBEADDRINUSE\fP" -the given address is already in use. -.IP "\fBEADDRNOTAVAIL\fP" -a nonexistent interface was requested or the requested address was not local. -.SH EXAMPLE -.nf -void *s = zmq_socket (context, ZMQ_PUB); -assert (s); -int rc = zmq_bind (s, "inproc://my_publisher"); -assert (rc == 0); -rc = zmq_bind (s, "tcp://eth0:5555"); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_connect (3) -.BR zmq_socket (3) -.BR zmq (7) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_close.3 b/man/man3/zmq_close.3 deleted file mode 100644 index ad731d3..0000000 --- a/man/man3/zmq_close.3 +++ /dev/null @@ -1,30 +0,0 @@ -.TH zmq_close 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_close \- destroys 0MQ socket -.SH SYNOPSIS -.B int zmq_close (void *s); -.SH DESCRIPTION -Destroys 0MQ socket (one created using -.IR zmq_socket -function). All sockets have to be properly closed before the application -terminates, otherwise memory leaks will occur. Note that any outbound messages -that haven't been psuhed to the network yet and any inbound messages that -haven't been received by the application yet will be dropped on the socket -shutdown. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -int rc = zmq_close (s); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_socket (3) -.BR zmq_term (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_connect.3 b/man/man3/zmq_connect.3 deleted file mode 100644 index 925b66e..0000000 --- a/man/man3/zmq_connect.3 +++ /dev/null @@ -1,49 +0,0 @@ -.TH zmq_connect 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_connect \- connect the socket to the specified peer -.SH SYNOPSIS -.B int zmq_connect (void *s, const char *addr); -.SH DESCRIPTION -The function connect socket -.IR s -to the peer identified by -.IR addr . -Actual semantics of the command depend on the underlying transport mechanism, -however, in cases where peers connect in an asymmetric manner, -.IR zmq_bind -should be called first, -.IR zmq_connect -afterwards. Formats of the -.IR addr -parameter are defined by individual transports. For a list of supported -transports have a look at -.IR zmq(7) -manual page. - -Note that single socket can be connected (and bound) to -arbitrary number of peers using different transport mechanisms. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -.IP "\fBEPROTONOSUPPORT\fP" -unsupported protocol. -.IP "\fBENOCOMPATPROTO\fP" -protocol is not compatible with the socket type. -.SH EXAMPLE -.nf -void *s = zmq_socket (context, ZMQ_SUB); -assert (s); -int rc = zmq_connect (s, "inproc://my_publisher"); -assert (rc == 0); -rc = zmq_connect (s, "tcp://server001:5555"); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_bind (3) -.BR zmq_socket (3) -.BR zmq (7) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_flush.3 b/man/man3/zmq_flush.3 deleted file mode 100644 index eb2a719..0000000 --- a/man/man3/zmq_flush.3 +++ /dev/null @@ -1,37 +0,0 @@ -.TH zmq_flush 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_flush \- flushes pre-sent messages to the socket -.SH SYNOPSIS -.B int zmq_flush (void *s); -.SH DESCRIPTION -Flushes all the pre-sent messages - i.e. those that have been sent with -ZMQ_NOFLUSH flag - to the socket. This functionality improves performance in -cases where several messages are sent during a single business operation. -It should not be used as a transaction - ACID properties are not guaranteed. -Note that calling -.IR zmq_send -without ZMQ_NOFLUSH flag automatically flushes all previously pre-sent messages. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -.IP "\fBENOTSUP\fP" -function isn't supported by particular socket type. -.IP "\fBEFSM\fP" -function cannot be called at the moment, because socket is not in the -approprite state. -.SH EXAMPLE -.nf -rc = zmq_send (s, &msg1, ZMQ_NOFLUSH); -assert (rc == 0); -rc = zmq_send (s, &msg2, ZMQ_NOFLUSH); -assert (rc == 0); -rc = zmq_flush (s); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_send (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_init.3 b/man/man3/zmq_init.3 deleted file mode 100644 index 6b5e75f..0000000 --- a/man/man3/zmq_init.3 +++ /dev/null @@ -1,40 +0,0 @@ -.TH zmq_init 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_init \- initialises 0MQ context -.SH SYNOPSIS -.B void *zmq_init (int app_threads, int io_threads, int flags); -.SH DESCRIPTION -Initialises 0MQ context. -.IR app_threads -specifies maximal number of application threads that can own open sockets -at the same time. At least one application thread should be defined. -.IR io_threads -specifies the size of thread pool to handle I/O operations. The value shouldn't -be negative. Zero can be used in case only in-process messaging is going to be -used, i.e. there will be no I/O traffic. - -.IR flags -argument is a combination of the flags defined below: -.IP "\fBZMQ_POLL\fP" -flag specifying that the sockets within this context should be pollable (see -.IR zmq_poll -). Pollable sockets may add a little latency to the message transfer when -compared to non-pollable sockets. - -.SH RETURN VALUE -Function returns context handle is successful. Otherwise it returns NULL and -sets errno to one of the values below. -.SH ERRORS -.IP "\fBEINVAL\fP" -there's less than one application thread allocated, or number of I/O threads -is negative. -.SH EXAMPLE -.nf -void *ctx = zmq_init (1, 1, ZMQ_POLL); -assert (ctx); -.fi -.SH SEE ALSO -.BR zmq_term (3) -.BR zmq_socket (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_msg_close.3 b/man/man3/zmq_msg_close.3 deleted file mode 100644 index e601ea2..0000000 --- a/man/man3/zmq_msg_close.3 +++ /dev/null @@ -1,32 +0,0 @@ -.TH zmq_msg_close 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_msg_close \- destroys 0MQ message -.SH SYNOPSIS -.B int zmq_msg_close (zmq_msg_t *msg); -.SH DESCRIPTION -Deallocates message -.IR msg -including any associated buffers (unless the buffer is -shared with another message). Not calling this function can result in -memory leaks. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -zmq_msg_t msg; -rc = zmq_msg_init_size (&msg, 1000000); -assert (rc = 0); -rc = zmq_msg_close (&msg); -assert (rc = 0); -.fi -.SH SEE ALSO -.BR zmq_msg_init (3) -.BR zmq_msg_init_size (3) -.BR zmq_msg_init_data (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_msg_copy.3 b/man/man3/zmq_msg_copy.3 deleted file mode 100644 index acb8389..0000000 --- a/man/man3/zmq_msg_copy.3 +++ /dev/null @@ -1,43 +0,0 @@ -.TH zmq_msg_copy 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_msg_copy \- copies content of a message to another message -.SH SYNOPSIS -.B int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src); -.SH DESCRIPTION -Copy the -.IR src -message to -.IR dest . -The original content of -.IR dest -is orderly deallocated. -Caution: The implementation may choose not to physically copy the data, rather -to share the buffer between two messages. Thus avoid modifying message data -after the message was copied. Doing so can modify multiple message instances. -If what you need is actual hard copy, allocate new message using -.IR zmq_msg_size -and copy the data using -.IR memcpy . -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -zmq_msg_t dest; -rc = zmq_msg_init (&dest); -assert (rc == 0); -rc = zmq_msg_copy (&dest, &src); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_msg_move (3) -.BR zmq_msg_init (3) -.BR zmq_msg_init_size (3) -.BR zmq_msg_init_data (3) -.BR zmq_msg_close (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_msg_data.3 b/man/man3/zmq_msg_data.3 deleted file mode 100644 index ef3cba8..0000000 --- a/man/man3/zmq_msg_data.3 +++ /dev/null @@ -1,27 +0,0 @@ -.TH zmq_msg_data 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_msg_data \- retrieves pointer to the message content -.SH SYNOPSIS -.B void *zmq_msg_data (zmq_msg_t *msg); -.SH DESCRIPTION -Returns pointer to message data. Always use this function to access the data, -never use -.IR zmq_msg_t -members directly. -.SH RETURN VALUE -Pointer to the message data. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -zmq_msg_t msg; -rc = zmq_msg_init_size (&msg, 100); -memset (zmq_msg_data (&msg), 0, 100); -.fi -.SH SEE ALSO -.BR zmq_msg_init (3) -.BR zmq_msg_init_size (3) -.BR zmq_msg_init_data (3) -.BR zmq_msg_close (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_msg_init.3 b/man/man3/zmq_msg_init.3 deleted file mode 100644 index 80d51d2..0000000 --- a/man/man3/zmq_msg_init.3 +++ /dev/null @@ -1,33 +0,0 @@ -.TH zmq_msg_init 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_msg_init \- initialises empty 0MQ message -.SH SYNOPSIS -.B int zmq_msg_init (zmq_msg_t *msg); -.SH DESCRIPTION -Initialises 0MQ message zero bytes long. The function is most useful -to initialise a -.IR zmq_msg_t -structure before receiving a message. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -zmq_msg_t msg; -rc = zmq_msg_init (&msg); -assert (rc == 0); -rc = zmq_recv (s, &msg, 0); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_msg_close (3) -.BR zmq_msg_init_size (3) -.BR zmq_msg_init_data (3) -.BR zmq_msg_data (3) -.BR zmq_msg_size (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_msg_init_data.3 b/man/man3/zmq_msg_init_data.3 deleted file mode 100644 index 0af95be..0000000 --- a/man/man3/zmq_msg_init_data.3 +++ /dev/null @@ -1,55 +0,0 @@ -.TH zmq_msg_init_data 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_msg_init \- initialises 0MQ message from the given data -.SH SYNOPSIS -.nf -.B typedef void (zmq_free_fn) (void *data, void *hint); -.B int zmq_msg_init_data (zmq_msg_t *msg, void *data, size_t size, zmq_free_fn *ffn, void *hint); -.fi -.SH DESCRIPTION -Initialise a message from a supplied buffer. Message isn't copied, -instead 0MQ infrastructure takes ownership of the buffer located at address -.IR data , -.IR size -bytes long. -Deallocation function ( -.IR ffn -) will be called once the data are not needed anymore. When using a static -constant buffer, -.IR ffn -may be NULL to prevent subsequent deallocation. If needed, additional -.IR hint -can be passed to the initialisation function. It's an opaque pointer that will -be later on passed to -.IR ffn -as a second argument. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -void my_free (void *data, void *hint) {free (data);} - - ... - -void *data = malloc (6); -assert (data); -memcpy (data, "ABCDEF", 6); -zmq_msg_t msg; -rc = zmq_msg_init_data (&msg, data, 6, my_free, NULL); -assert (rc == 0); -rc = zmq_send (s, &msg, 0); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_msg_close (3) -.BR zmq_msg_init (3) -.BR zmq_msg_init_size (3) -.BR zmq_msg_data (3) -.BR zmq_msg_size (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_msg_init_size.3 b/man/man3/zmq_msg_init_size.3 deleted file mode 100644 index cc7a71e..0000000 --- a/man/man3/zmq_msg_init_size.3 +++ /dev/null @@ -1,44 +0,0 @@ -.TH zmq_msg_init_size 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_msg_init \- initialises 0MQ message of a specified size -.SH SYNOPSIS -.B int zmq_msg_init_size (zmq_msg_t *msg, size_t size); -.SH DESCRIPTION -Initialises 0MQ message -.IR size -bytes long. The implementation chooses whether it is more efficient to store -message content on the stack (small messages) or on the heap (large messages). -Therefore, never access message data directly via -.IR zmq_msg_t -members, rather use -.IR zmq_msg_data -and -.IR zmq_msg_size -functions to get message data and size. Note that the message data are not -nullified to avoid the associated performance impact. Thus you -should expect your message to contain bogus data after this call. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -.IP "\fBENOMEM\fP" -memory to hold the message cannot be allocated. -.SH EXAMPLE -.nf -zmq_msg_t msg; -rc = zmq_msg_init_size (&msg, 6); -assert (rc == 0); -memcpy (zmq_msg_data (&msg), "ABCDEF", 6); -rc = zmq_send (s, &msg, 0); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_msg_close (3) -.BR zmq_msg_init (3) -.BR zmq_msg_init_data (3) -.BR zmq_msg_data (3) -.BR zmq_msg_size (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_msg_move.3 b/man/man3/zmq_msg_move.3 deleted file mode 100644 index 8663585..0000000 --- a/man/man3/zmq_msg_move.3 +++ /dev/null @@ -1,38 +0,0 @@ -.TH zmq_msg_move 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_msg_move \- moves content of a message to another message -.SH SYNOPSIS -.B int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src); -.SH DESCRIPTION -Move the content of the message from -.IR src -to -.IR dest . -The content isn't copied, just moved. -.IR src -becomes an empty message after the call. Original content of -.IR dest -message is deallocated. -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -zmq_msg_t dest; -rc = zmq_msg_init (&dest); -assert (rc == 0); -rc = zmq_msg_move (&dest, &src); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_msg_copy (3) -.BR zmq_msg_init (3) -.BR zmq_msg_init_size (3) -.BR zmq_msg_init_data (3) -.BR zmq_msg_close (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_msg_size.3 b/man/man3/zmq_msg_size.3 deleted file mode 100644 index aa1f8b0..0000000 --- a/man/man3/zmq_msg_size.3 +++ /dev/null @@ -1,30 +0,0 @@ -.TH zmq_msg_size 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_msg_size \- retrieves size of the message content -.SH SYNOPSIS -.B size_t zmq_msg_size (zmq_msg_t *msg); -.SH DESCRIPTION -Returns size of the message data. Always use this function to get the size, -never use -.IR zmq_msg_t -members directly. -.SH RETURN VALUE -Size of the message data (bytes). -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -zmq_msg_t msg; -rc = zmq_msg_init (&msg); -assert (rc == 0); -rc = zmq_recv (s, &msg, 0); -assert (rc == 0); -size_t msg_size = zmq_msg_size (&msg); -.fi -.SH SEE ALSO -.BR zmq_msg_init (3) -.BR zmq_msg_init_size (3) -.BR zmq_msg_init_data (3) -.BR zmq_msg_close (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_poll.3 b/man/man3/zmq_poll.3 deleted file mode 100644 index f70bf18..0000000 --- a/man/man3/zmq_poll.3 +++ /dev/null @@ -1,71 +0,0 @@ -.TH zmq_poll 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_poll \- polls for events on a set of 0MQ and POSIX sockets -.SH SYNOPSIS -.B int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout); -.SH DESCRIPTION -Waits for the events specified by -.IR items -parameter. Number of items in the array is determined by -.IR nitems -argument. Each item in the array looks like this: - -.nf -typedef struct -{ - void *socket; - int fd; - short events; - short revents; -} zmq_pollitem_t; -.fi - -0MQ socket to poll on is specified by -.IR socket . -In case you want to poll on standard POSIX socket, set -.IR socket -to NULL and fill the POSIX file descriptor to -.IR fd . -.IR events -specifies which events to wait for. It's a combination of the values below. -Once the call exits, -.IR revent -will be filled with events that have actually occured on the socket. The field -will contain a combination of the values below. - -.IP "\fBZMQ_POLLIN\fP" -poll for incoming messages. -.IP "\fBZMQ_POLLOUT\fP" -wait while message can be set socket. Poll will return if a message of at least -one byte can be written to the socket. However, there is no guarantee that -arbitrarily large message can be sent. - -.IR timeout -argument specifies an upper limit on the time for which -.IR zmq_poll -will block, in microseconds. Specifying a negative value in timeout means -an infinite timeout. - -.SH RETURN VALUE -Function returns number of items signaled or -1 in the case of error. -.SH ERRORS -.IP "\fBEFAULT\fP" -there's a 0MQ socket in the pollset belonging to a different application thread. -.IP "\fBENOTSUP\fP" -0MQ context was initialised without ZMQ_POLL flag. I/O multiplexing is disabled. -.SH EXAMPLE -.nf -zmq_pollitem_t items [2]; -items [0].socket = s; -items [0].events = ZMQ_POLLIN; -items [1].socket = NULL; -items [1].fd = my_fd; -items [1].events = ZMQ_POLLIN; - -int rc = zmq_poll (items, 2); -assert (rc != -1); -.fi -.SH SEE ALSO -.BR zmq_socket (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_recv.3 b/man/man3/zmq_recv.3 deleted file mode 100644 index 8a961bb..0000000 --- a/man/man3/zmq_recv.3 +++ /dev/null @@ -1,52 +0,0 @@ -.TH zmq_recv 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_recv \- retrieves a message from the socket -.SH SYNOPSIS -.B int zmq_recv (void *s, zmq_msg_t *msg, int flags); -.SH DESCRIPTION -Receive a message from the socket -.IR s , -store it in -.IR msg . -Any content previously in -.IR msg -will be properly deallocated. -.IR flags -argument can be combination of the flags described below. - -.IP "\fBZMQ_NOBLOCK\fP" -The flag specifies that the operation should be performed in -non-blocking mode. I.e. if it cannot be processed immediately, -error should be returned with -.IR errno -set to EAGAIN. - -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -.IP "\fBEAGAIN\fP" -it's a non-blocking receive and there's no message available at the moment. -.IP "\fBENOTSUP\fP" -function isn't supported by particular socket type. -.IP "\fBEFSM\fP" -function cannot be called at the moment, because socket is not in the -appropriate state. This error may occur with sockets that switch between -several states (e.g. ZMQ_REQ). -.SH EXAMPLE -.nf -zmq_msg_t msg; -int rc = zmq_msg_init (&msg); -assert (rc == 0); -rc = zmq_recv (s, &msg, 0); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_send (3) -.BR zmq_msg_init (3) -.BR zmq_msg_data (3) -.BR zmq_msg_size (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_send.3 b/man/man3/zmq_send.3 deleted file mode 100644 index c6644fc..0000000 --- a/man/man3/zmq_send.3 +++ /dev/null @@ -1,64 +0,0 @@ -.TH zmq_send 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_send \- sends a message -.SH SYNOPSIS -.B int zmq_send (void *s, zmq_msg_t *msg, int flags); -.SH DESCRIPTION -Send the message -.IR msg -to the socket -.IR s . -.IR flags -argument can be combination the flags described below. - -.IP "\fBZMQ_NOBLOCK\fP" -The flag specifies that the operation should be performed in -non-blocking mode. I.e. if it cannot be processed immediately, -error should be returned with -.IR errno -set to EAGAIN. - -.IP "\fBZMQ_NOFLUSH\fP" -The flag specifies that -.IR zmq_send -should not flush the message downstream immediately. Instead, it should batch -ZMQ_NOFLUSH messages and send them downstream only once -.IR zmq_flush -is invoked. This is an optimisation for cases where several messages are sent -in a single business transaction. However, the effect is measurable only in -extremely high-perf scenarios (million messages a second or so). -If that's not your case, use standard flushing send instead. - -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -.IP "\fBEAGAIN\fP" -it's a non-blocking send and message cannot be sent at the moment. -.IP "\fBENOTSUP\fP" -function isn't supported by particular socket type. -.IP "\fBEFSM\fP" -function cannot be called at the moment, because socket is not in the -appropriate state. This error may occur with sockets that switch between -several states (e.g. ZMQ_REQ). -.SH EXAMPLE -.nf -zmq_msg_t msg; -int rc = zmq_msg_init_size (&msg, 6); -assert (rc == 0); -memset (zmq_msg_data (&msg), 'A', 6); -rc = zmq_send (s, &msg, 0); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_flush (3) -.BR zmq_recv (3) -.BR zmq_msg_init (3) -.BR zmq_msg_init_size (3) -.BR zmq_msg_init_data (3) -.BR zmq_msg_data (3) -.BR zmq_msg_size (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_setsockopt.3 b/man/man3/zmq_setsockopt.3 deleted file mode 100644 index f1dd9cb..0000000 --- a/man/man3/zmq_setsockopt.3 +++ /dev/null @@ -1,137 +0,0 @@ -.TH zmq_setsockopt 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_setsockopt \- sets a specified option on a 0MQ socket -.SH SYNOPSIS -.B int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen); -.SH DESCRIPTION -Sets an option on the socket. -.IR option -argument specifies the option from the list below. -.IR optval -is a pointer to the value to set, -.IR optvallen -is the size of the value in bytes. - -.IP "\fBZMQ_HWM\fP" -High watermark for the message pipes associated with the socket. The water -mark cannot be exceeded. If the messages don't fit into the pipe emergency -mechanisms of the particular socket type are used (block, drop etc.) If HWM -is set to zero, there are no limits for the content of the pipe. - -Type: int64_t Unit: messages Default: 0 - -.IP "\fBZMQ_LWM\fP" -Low watermark makes sense only if high watermark is defined (i.e. is non-zero). -When the emergency state is reached when messages overflow the pipe, the -emergency lasts at most till the size of the pipe decreases to low watermark. -Normal state is resumed at that point. - -Type: int64_t Unit: messages Default: 0 - -.IP "\fBZMQ_SWAP\fP" -Swap allows the pipe to exceed high watermark. However, the data are written -to the disk rather than held in the memory. Until high watermark is -exceeded there is no disk activity involved though. The value of the option -defines maximal size of the swap file. - -Type: int64_t Unit: bytes Default: 0 - -.IP "\fBZMQ_AFFINITY\fP" -Affinity defines which threads in the thread pool will be used to handle -newly created sockets. This way you can dedicate some of the threads (CPUs) -to a specific work. Value of 0 means no affinity. Work is distributed -fairly among the threads in the thread pool. For non-zero values, the lowest -bit corresponds to the thread 1, second lowest bit to the thread 2 etc. -Thus, value of 3 means that from now on newly created sockets will handle -I/O activity exclusively using threads no. 1 and 2. - -Type: int64_t Unit: N/A (bitmap) Default: 0 - -.IP "\fBZMQ_IDENTITY\fP" -Identity of the socket. Identity is important when restarting applications. -If the socket has no identity, each run of the application is completely -separated from other runs. However, with identity application reconnects to -existing infrastructure left by the previous run. Thus it may receive -messages that were sent in the meantime, it shares pipe limits with the -previous run etc. - -Type: string Unit: N/A Default: NULL - -.IP "\fBZMQ_SUBSCRIBE\fP" -Applicable only to ZMQ_SUB socket type. It establishes new message filter. -When ZMQ_SUB socket is created all the incoming messages are filtered out. -This option allows you to subscribe for all messages (""), or messages -beginning with specific prefix (e.g. "animals.mammals.dogs."). Multiple -filters can be attached to a single 'sub' socket. In that case message passes -if it matches at least one of the filters. - -Type: string Unit: N/A Default: N/A - -.IP "\fBZMQ_UNSUBSCRIBE\fP" -Applicable only to ZMQ_SUB socket type. Removes existing message filter. -The filter specified must match the string passed to ZMQ_SUBSCRIBE options -exactly. If there were several instances of the same filter created, -this options removes only one of them, leaving the rest in place -and functional. - -Type: string Unit: N/A Default: N/A - -.IP "\fBZMQ_RATE\fP" -This option applies only to sending side of multicast transports (pgm & udp). -It specifies maximal outgoing data rate that an individual sender socket -can send. - -Type: uint64_t Unit: kilobits/second Default: 100 - -.IP "\fBZMQ_RECOVERY_IVL\fP" -This option applies only to multicast transports (pgm & udp). It specifies -how long can the receiver socket survive when the sender is inaccessible. -Keep in mind that large recovery intervals at high data rates result in -very large recovery buffers, meaning that you can easily overload your box -by setting say 1 minute recovery interval at 1Gb/s rate (requires -7GB in-memory buffer). - -Type: uint64_t Unit: seconds Default: 10 - -.IP "\fBZMQ_MCAST_LOOP\fP" -This option applies only to multicast transports (pgm & udp). Value of 1 -means that the mutlicast packets can be received on the box they were sent -from. Setting the value to 0 disables the loopback functionality which -can have negative impact on the performance. If possible, disable -the loopback in production environments. - -Type: uint64_t Unit: N/A (boolean value) Default: 1 - -.IP "\fBZMQ_SNDBUF\fP" -Sets the underlying kernel transmit buffer size to the specified size. See -.IR SO_SNDBUF -POSIX socket option. Value of zero means leaving the OS default unchanged. - -Type: uint64_t Unit: bytes Default: 0 - -.IP "\fBZMQ_RCVBUF\fP" -Sets the underlying kernel receive buffer size to the specified size. See -.IR SO_RCVBUF -POSIX socket option. Value of zero means leaving the OS default unchanged. - -Type: uint64_t Unit: bytes Default: 0 - -.SH RETURN VALUE -In case of success the function returns zero. Otherwise it returns -1 and -sets -.IR errno -to the appropriate value. -.SH ERRORS -.IP "\fBEINVAL\fP" -unknown option, a value with incorrect length or invalid value. -.SH EXAMPLE -.nf -int rc = zmq_setsockopt (s, ZMQ_SUBSCRIBE, "", 0); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_socket (3) -.BR zmq (7) - -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_socket.3 b/man/man3/zmq_socket.3 deleted file mode 100644 index aceb306..0000000 --- a/man/man3/zmq_socket.3 +++ /dev/null @@ -1,110 +0,0 @@ -.TH zmq_socket 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_socket \- creates 0MQ socket -.SH SYNOPSIS -.B void *zmq_socket (void *context, int type); -.SH DESCRIPTION -Open a socket within the specified -.IR context . -To create a context, use -.IR zmq_init -function. -.IR type -argument can be one of the values defined below. Note that each socket is owned -by exactly one thread (the one that it was created from) and should not be used -from any other thread. - -.IP "\fBZMQ_P2P\fP" -Socket to communicate with a single peer. Allows for only a single connect or a -single bind. There's no message routing or message filtering involved. - -Compatible peer sockets: ZMQ_P2P. - -.IP "\fBZMQ_PUB\fP" -Socket to distribute data. Recv function is not implemented for this socket -type. Messages are distributed in fanout fashion to all the peers. - -Compatible peer sockets: ZMQ_SUB. - -.IP "\fBZMQ_SUB\fP" -Socket to subscribe for data. Send function is not implemented for this -socket type. Initially, socket is subscribed for no messages. Use ZMQ_SUBSCRIBE -option to specify which messages to subscribe for. - -Compatible peer sockets: ZMQ_PUB. - -.IP "\fBZMQ_REQ\fP" -Socket to send requests and receive replies. Requests are load-balanced among -all the peers. This socket type allows only an alternated sequence of -send's and recv's. - -Compatible peer sockets: ZMQ_REP, ZMQ_XREP. - -.IP "\fBZMQ_REP\fP" -Socket to receive requests and send replies. This socket type allows -only an alternated sequence of recv's and send's. Each send is routed to -the peer that issued the last received request. - -Compatible peer sockets: ZMQ_REQ, ZMQ_XREQ. - -.IP "\fBZMQ_XREQ\fP" -Special socket type to be used in request/reply middleboxes such as -.BR zmq_queue(7) . -Requests forwarded using this socket type should be tagged by a proper prefix -identifying the original requester. Replies received by this socket are tagged -with a proper postfix that can be use to route the reply back to the original -requester. - -Compatible peer sockets: ZMQ_REP, ZMQ_XREP. - -.IP "\fBZMQ_XREP\fP" -Special socket type to be used in request/reply middleboxes such as -.BR zmq_queue(7) . -Requests received using this socket are already properly tagged with prefix -identifying the original requester. When sending a reply via XREP socket the -message should be tagged with a prefix from a corresponding request. - -Compatible peer sockets: ZMQ_REQ, ZMQ_XREQ. - -.IP "\fBZMQ_UPSTREAM\fP" -Socket to receive messages from up the stream. Messages are fair-queued -from among all the connected peers. Send function is not implemented for -this socket type. - -Compatible peer sockets: ZMQ_DOWNSTREAM. - -.IP "\fBZMQ_DOWNSTREAM\fP" -Socket to send messages down stream. Messages are load-balanced among all the -connected peers. Recv function is not implemented for this socket type. - -Compatible peer sockets: ZMQ_UPSTREAM. - -.SH RETURN VALUE -Function returns socket handle is successful. Otherwise it returns NULL and -sets errno to one of the values below. -.SH ERRORS -.IP "\fBEINVAL\fP" -invalid socket type. -.IP "\fBEMTHREAD\fP" -the number of application threads allowed to own 0MQ sockets was exceeded. See -.IR app_threads -parameter to -.IR zmq_init -function. -.SH EXAMPLE -.nf -void *s = zmq_socket (context, ZMQ_PUB); -assert (s); -int rc = zmq_bind (s, "tcp://192.168.0.1:5555"); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_init (3) -.BR zmq_setsockopt (3) -.BR zmq_bind (3) -.BR zmq_connect (3) -.BR zmq_send (3) -.BR zmq_flush (3) -.BR zmq_recv (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_strerror.3 b/man/man3/zmq_strerror.3 deleted file mode 100644 index 1ee2efe..0000000 --- a/man/man3/zmq_strerror.3 +++ /dev/null @@ -1,27 +0,0 @@ -.TH zmq_strerror 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_strerror \- returns string describing the error number -.SH SYNOPSIS -.B const char *zmq_strerror (int errnum); -.SH DESCRIPTION -As 0MQ defines few additional (non-POSIX) error codes, standard -.IR strerror -isn't capable of translating those errors into human readable strings. Instead, -.IR zmq_strerror -should be used. -.SH RETURN VALUE -Returns string describing the error number. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -void *ctx = zmq_init (1, 1, 0); -if (!ctx) { - printf ("error occured during zmq_init: %s\\n", zmq_strerror (errno)); - abort (); -} -.fi -.SH SEE ALSO -.BR zmq (7) -.SH AUTHOR -Martin Sustrik diff --git a/man/man3/zmq_term.3 b/man/man3/zmq_term.3 deleted file mode 100644 index b0b8962..0000000 --- a/man/man3/zmq_term.3 +++ /dev/null @@ -1,25 +0,0 @@ -.TH zmq_term 3 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -zmq_term \- terminates 0MQ context -.SH SYNOPSIS -.B int zmq_term (void *context); -.SH DESCRIPTION -Destroys 0MQ context. However, if there are still any sockets open within -the context, -.IR zmq_term -succeeds but shutdown of the context is delayed till the last socket is closed. -.SH RETURN VALUE -Function returns zero is successful. Otherwise it returns -1 and -sets errno to one of the values below. -.SH ERRORS -No errors are defined. -.SH EXAMPLE -.nf -int rc = zmq_term (context); -assert (rc == 0); -.fi -.SH SEE ALSO -.BR zmq_init (3) -.BR zmq_close (3) -.SH AUTHOR -Martin Sustrik diff --git a/man/man7/zmq.7 b/man/man7/zmq.7 deleted file mode 100644 index ed7e08b..0000000 --- a/man/man7/zmq.7 +++ /dev/null @@ -1,151 +0,0 @@ -.TH zmq 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ \- a lightweight messaging kernel -.SH SYNOPSIS - -0MQ is an extension of POSIX sockets. It is a library that augments standard -networking sockets by special capabilities that you can otherwise get only -by using specialised "messaging middleware" products, such as automated -handling of connections and disconnections, delivery of a message to multiple -destinations, load balancing messages, sophisticated message filtering etc. - -0MQ is designed to be extremely fast. Expected end-to-end latencies for -messages passed over a LAN are in tens of microseconds. Expected -throughputs are to be measured in millions of messages per second. - -0MQ is designed to be very thin. It requires no more than couple of -pages in resident memory and is thus well suited for any environment ranging -from small embedded devices, routers and cell phones to enterprise-scale -data centers. - -0MQ runs on a wide range of operating systems and supports variety of processor -microarchitectures. - -0MQ is accessible from a large set of programming languages. - -0MQ is fully open sourced LGPL-licensed software. - -.SH CONTEXT -Each 0MQ socket lives within a specific context. Creating and destroying -context is a counterpart of library initialisation/deinitialisation as used -elsewhere. Ability to create multiple contexts saves the day when an application -happens to link (indirectly and involuntarily) with several instances of 0MQ. - -Initialise 0MQ context: -.BR zmq_init(3) - -Uninitialise 0MQ context: -.BR zmq_term(3) - -.SH MESSAGES -Message is a discrete unit of data passed between applications or components -of the same application. 0MQ message has no internal structure, it is an opaque -BLOB. When writing data to or reading data from the message, you are free to -use any of the many serialisation libraries available. Alternatively, you can -use your own serialisation code. The latter option is especially useful when -migrating legacy applications to 0MQ - there's no need to break existing -message formats. - -Initialise a message: -.BR zmq_msg_init(3) -.BR zmq_msg_size(3) -.BR zmq_msg_data(3) - -Uninitialise a message: -.BR zmq_msg_close(3) - -Access message content: -.BR zmq_msg_data(3) -.BR zmq_msg_size(3) - -Message manipulation: -.BR zmq_msg_copy(3) -.BR zmq_msg_move(3) - -.SH SOCKETS -0MQ sockets are very similar to POSIX sockets. See following manual pages to -understand them in depth. - -Creating a socket: -.BR zmq_socket(3) - -Closing a socket: -.BR zmq_close(3) - -Setting socket options: -.BR zmq_setsockopt(3) - -Establishing a message flow: -.BR zmq_bind(3) -.BR zmq_connect(3) - -Sending & receiving messages: -.BR zmq_send(3) -.BR zmq_flush(3) -.BR zmq_recv(3) - -.SH MULTIPLEXING -0MQ allows you to handle multiple sockets (0MQ as well as standard POSIX) -in an asynchronous manner. - -Poll for I/O events: -.BR zmq_poll(3) - -.SH ERROR HANDLING -0MQ defines couple of non-POSIX error codes. Use following functions to handle -them neatly. - -Convert error code into human readable string: -.BR zmq_strerror(3) - -.SH TRANSPORTS -0MQ allows for using different underlying transport mechanisms (even multiple -at once). Each transport mechanism has its own advantages and drawbacks. For -detailed description of individual mechanisms check following manual pages: - -TCP/IP transport: -.BR zmq_tcp(7) - -UDP reliable multicast transport: -.BR zmq_udp(7) - -PGM reliable multicast transport: -.BR zmq_pgm(7) - -Inter-process transport: -.BR zmq_ipc (7) - -In-process (inter-thread) transport: -.BR zmq_inproc(7) - -.SH DEVICES -Aside of the messaging library (a.k.a. messaging kernel) 0MQ provides pre-built -executables - devices - to serve as middle nodes in complex messaging -topologies. For detailed description of individual devices check following -manual pages: - -Forwarder device for PUB/SUB messaging: -.BR zmq_forwarder(1) - -Streamer device for UPSTREAM/DOWNSTREAM messaging: -.BR zmq_streamer(1) -.SH LANGUAGES -0MQ manual pages provide info on C API. To find out how the your -favourite language API maps to C API and thus how to find relevant manual pages, -see following articles: - -C++: -.BR zmq_cpp(7) - -Common Lisp: -.BR zmq_cl(7) - -Python: -.BR zmq_python(7) - -Ruby: -.BR zmq_ruby(7) - -.SH AUTHOR -Martin Sustrik - diff --git a/man/man7/zmq_cl.7 b/man/man7/zmq_cl.7 deleted file mode 100644 index 0439028..0000000 --- a/man/man7/zmq_cl.7 +++ /dev/null @@ -1,124 +0,0 @@ -.TH zmq_cl 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ Common Lisp API \- interface between 0MQ and Common Lisp applications -.SH SYNOPSIS - -This manual page explains how Common Lisp API maps to underlying C -API. - -Common Lisp API repeats C API in general. All constants defined with C -API are available with Common Lisp API. C names are mapped to lisp -names by these rules: a) all names are `zmq' namespace; b) all names -are in lower case; c) underscores translate to dashes. - -Example of mappings: - -.IR zmq_msg_init_data -maps to -.IR zmq:msg-init-data - -.IR ZMQ_PUB -maps to -.IR zmq:pub - -To learn about individual functions and parameters check -appropriate C API manual pages. - -For example, to understand -.IR zmq:setsockopt -function check -.BR zmq_setsockopt(3) . - -.SH Data structures -Data structures are wrapped into CLOS classes with automatic memory -management. 0MQ describes two such structures: -.IR msg_t -and -.IR pollitem_t . - -Message constructor supports keywords -.IR :size -and -.IR :data. -Keyword :size specifies the size of -message. Keyword :data specifies initial contents of message, and it -can be either string or 8-bit array. For example: - -* (make-instance 'zmq:msg :data #(1 2 3)) - -creates a message with 3 bytes '1, 2, 3' in it. - -.SH Accessing message data - -There 3 functions to read message body in different forms: -msg-data-as-string, msg-data-as-array and msg-data-as-is, returning -data as string, as array and as raw foreign pointer to underlaying -buffer respectively. For example: - -* (zmq:msg-data-as-array msg) - -returns #(1 2 3) for message from previous example. - -It is possible to access underlying foreign object via class slot -named `raw'. - -* (slot-value obj 'zmq:raw) - -or, if `obj' is of known type `msg': - -* (zmq:msg-raw obj) - -.SH Macros -There are several macroses to help with managing zeromq objects: - -.SH with-context -Macro -.IR with-context -creates 0MQ context and requires 3 obligatory arguments: context name, -number of application threads and number of input/output -threads. Optional parameter `flags' can be also supplied, see -.BR zmq_init(3) . -Context is terminated implicitly at the end of macro block. - -.SH with-socket -Macro -.IR with-socket -creates 0MQ socket within given context. Requires 3 arguments: socket -name, context name and socket type. See -.BR zmq_socket(3) . -Socket is closed implicitly at the end of macro block. - -.SH with-polls -Macro -.IR with-polls -creates 0MQ polls, containing different sets of pollitems. For -example, to create two poll sets for network pipes: - -* (zmq:with-polls ((poll1 . ((sock1 . zmq:pollin) - (sock2 . zmq:pollout))) - (poll2 . ((sock1 . zmq:pollout) - (sock2 . zmq:pollin)))) - - (process-sockets (zmq:poll poll-set1)) - - (process-sockets (zmq:poll poll-set2))) - -Note, -.IR zmq:poll -returns list of revents for sockets from given poll set. - -Polls are closed implicitly at the end of macro block. - -.SH EXAMPLE -.nf - -(zmq::with-context (ctx 1 1) - (zmq:with-socket (s ctx zmq:pub) - (zmq:connect s "tcp://192.168.0.115:5555") - (zmq:send s (make-instance 'zmq:msg :data "Hello, world!")))) - -.SH "SEE ALSO" -.BR zmq(7) -.SH AUTHOR -Martin Sustrik , -Vitaly Mayatskikh diff --git a/man/man7/zmq_cpp.7 b/man/man7/zmq_cpp.7 deleted file mode 100644 index e3324ba..0000000 --- a/man/man7/zmq_cpp.7 +++ /dev/null @@ -1,103 +0,0 @@ -.TH zmq_cpp 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ C++ API \- interface between 0MQ and C++ applications -.SH SYNOPSIS - -This manual page explains how C++ API maps to underlying C API. To learn about -individual functions and parameters check appropriate C API manual -pages. - -For example, to understand -.IR zmq::socket_t::setsockopt -function check -.BR zmq_setsockopt(3) . - -All 0MQ constants defined with C API are available with C++ API. - -.SH zmq::context_t - -This class encapsulates the functions dealing with initialisation and -termination of 0MQ context. Constructor of the class invokes -.BR zmq_init(3) -while destructor calls -.BR zmq_term(3) . - -.SH zmq::socket_t - -This class encapsulates all the functions to deal with 0MQ sockets. Constructor -calls -.BR zmq_socket(3) , -destructor calls -.BR zmq_close(3) . -Other functions of the class are mapped to C functions with corresponding names. -.IR zmq::socket_t::bind -calls -.BR zmq_bind(3) -etc. - -.SH zmq::message_t - -This class encapsulates -.IR zmq_msg_t -structure and all the C functions that deal with 0MQ messages. -Constructors of the class invoke corresponding initialisation functions ( -.BR zmq_msg_init(3) , -.BR zmq_msg_init_size(3) -and -.BR zmq_msg_init_data(3) , -while destructor invokes -.BR zmq_msg_close(3) -function. - -Remaining functions are mapped to C functions with corresponding names. -For instance, -.IR zmq::message_t::copy -is mapped to -.BR zmq_msg_copy(3) -etc. - -C++ provides an additional function not available with C API. -.IR zmq::message_t::rebuild -is equivalent to calling -.BR zmq_close(3) -followed by -.BR zmq_msg_init(3) , -.BR zmq_msg_init_size (3) -or -.BR zmq_msg_init_data(3) . -It provides a way to reuse existing -.IR zmq::message_t -instances to store different message content. - -.SH zmq::error_t - -All the errors reported using -.IR errno -mechanism in C API are automatically converted to exceptions in C++ API. -.IR zmq::error_t -is derived from -.IR std::exception -and uses -.BR zmq_strerror(3) -function to convert the error code to human-readable string. - -.SH zmq::poll - -.IR zmq::poll -function is a namespaced equivalent of raw C -.BR zmq_poll(3) -function. - -.SH EXAMPLE -.nf -zmq::context_t ctx (1, 1); -zmq::socket_t s (ctx, ZMQ_PUB); -s.connect ("tcp://192.168.0.115:5555"); -zmq::message_t msg (100); -memset (msg.data (), 0, 100); -s.send (msg); -.fi -.SH "SEE ALSO" -.BR zmq(7) -.SH AUTHOR -Martin Sustrik diff --git a/man/man7/zmq_inproc.7 b/man/man7/zmq_inproc.7 deleted file mode 100644 index 279d9b5..0000000 --- a/man/man7/zmq_inproc.7 +++ /dev/null @@ -1,42 +0,0 @@ -.TH zmq_inproc 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ In-process Transport \- transport to pass messages between threads -.SH SYNOPSIS - -In-process transport is optimised for passing messages between threads in the -same process. - -Messages are passed directly from one application thread to -another application thread. There are no intervening I/O threads involved. -Thus, if you are using 0MQ for in-process messaging only, you can initialise -the library ( -.IR zmq_init -) with zero I/O worker threads. - -.SH CONNECTION STRING - -Connection string for inproc transport is "inproc://" followed by an arbitrary -string. There are no restrictions on the string format: - -.nf - inproc://my_endpoint - inproc://feeds/opra/cboe - inproc://feeds.opra.nasdaq - inproc://!&W#($)_@_123*((^^^ -.fi - -.SH WIRE FORMAT - -In-process transport transfers messages via memory thus there is no need for a -wire format specification. - -.SH "SEE ALSO" - -.BR zmq_ipc (7) -.BR zmq_tcp (7) -.BR zmq_udp (7) -.BR zmq_pgm (7) - -.SH AUTHOR -Martin Sustrik - diff --git a/man/man7/zmq_ipc.7 b/man/man7/zmq_ipc.7 deleted file mode 100644 index b8c08e5..0000000 --- a/man/man7/zmq_ipc.7 +++ /dev/null @@ -1,34 +0,0 @@ -.TH zmq_ipc 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ IPC Transport \- transport to pass messages between processes -.SH SYNOPSIS - -Inter-process transport is optimised for passing messages between processes on -the same physical machine. - -.SH CONNECTION STRING - -Connection string for inproc transport is "ipc://" followed by a file name. -The file will be used as placeholder for a message endpoint. (UNIX domain -sockets associate a file with the listening socket in a similar way.) - -.nf - ipc:///tmp/my_ipc_endpoint - ipc:///tmp/prices.ipc -.fi - -.SH WIRE FORMAT - -IPC transport doesn't transfer messages across the network thus there is no need -for a wire format specification. - -.SH "SEE ALSO" - -.BR zmq_inproc (7) -.BR zmq_tcp (7) -.BR zmq_udp (7) -.BR zmq_pgm (7) - -.SH AUTHOR -Martin Sustrik - diff --git a/man/man7/zmq_java.7 b/man/man7/zmq_java.7 deleted file mode 100644 index dd0242f..0000000 --- a/man/man7/zmq_java.7 +++ /dev/null @@ -1,9 +0,0 @@ -.TH zmq_java 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ Java API \- interface between 0MQ and Java applications -.SH SYNOPSIS -.SH DESCRIPTION -.SH "SEE ALSO" -.SH AUTHOR -Martin Sustrik - diff --git a/man/man7/zmq_pgm.7 b/man/man7/zmq_pgm.7 deleted file mode 100644 index e1230ae..0000000 --- a/man/man7/zmq_pgm.7 +++ /dev/null @@ -1,98 +0,0 @@ -.TH zmq_pgm 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ PGM Transport \- reliable multicast transport -.SH SYNOPSIS - -PGM is a protocol for reliable multicast (RFC3208). 0MQ's PGM transport allows -you to deliver messages to multiple destinations sending the data over -the network once only. It makes sense to use PGM transport if the data, -delivered to each destination separately, would seriously load or even overload -the network. - -PGM sending is rate limited rather than controlled by receivers. Thus, to get -optimal performance you should set ZMQ_RATE and ZMQ_RECOVERY_IVL socket options -prior to using PGM transport. Also note that passing multicast packets via -loopback interface has negative effect on the overall performance of the system. -Thus, if not needed, you should turn multicast loopback off using ZMQ_MCAST_LOOP -socket option. - -PGM transport can be used only with ZMQ_PUB and ZMQ_SUB sockets. - -Caution: PGM protocol runs directly on top of IP protocol and thus needs to -open raw IP socket. On some operating systems this operation requires special -privileges. On Linux, for example, you would need to either run your application -as root or set adequate capabilities for your executable. Alternative approach -is to use UDP transport, -.IR zmq_udp(7) , -that stacks PGM on top of UDP and thus needs no special privileges. - -.SH CONNECTION STRING - -Connection string for PGM transport is "pgm://" followed by an IP address -of the NIC to use, semicolon, IP address of the multicast group, colon and -port number. IP address of the NIC can be either its numeric representation -or the name of the NIC as reported by operating system. IP address of the -multicast group should be specified in the numeric representation. For example: - -.nf - pgm://eth0;224.0.0.1:5555 - pgm://lo;230.0.0.0:6666 - pgm://192.168.0.111;224.0.0.1:5555 -.fi - -Note that NIC names are not standardised by POSIX. They tend to be rather -arbitrary and platform dependent. Say, "eth0" on Linux would correspond to "en0" -on OSX and "e1000g" on Solaris. On Windows platform, as there are no short NIC -names available, you have to use numeric IP addresses instead. - -.SH WIRE FORMAT - -Consecutive PGM packets are interpreted as a single continuous stream of data. -The data is then split into messages using the wire format described in -.IR zmq_tcp(7) . -Thus, messages are not aligned with packet boundaries and each message can start -at an arbitrary position within the packet and span several packets. - -Given this wire format, it would be impossible for late joining consumers to -identify message boundaries. To solve this problem, each PGM packet payload -starts with 16-bit unsigned integer in network byte order which specifies the -offset of the first message in the packet. If there's no beginning of a message -in the packet (it's a packet transferring inner part of a larger message) -the value of the initial integer is 0xFFFF. - -Each packet thus looks like this: - -.nf -+-----------+------------+------------------+-------- -| IP header | PGM header | offset (16 bits) | data ..... -+-----------+------------+------------------+-------- -.fi - -Following example shows how messages are arranged in subsequent packets: - -.nf -+---------------+--------+-----------+-----------------------------+ -| PGM/IPheaders | 0x0000 | message 1 | message 2 (part 1) | -+---------------+--------+-----------+-----------------------------+ - -+---------------+--------+-----------------------------------------+ -| PGM/IPheaders | 0xFFFF | message 2 (part 2) | -+---------------+--------+-----------------------------------------+ - -+---------------+--------+--------------------------+-----------+ -| PGM/IPheaders | 0x0008 | message 2 (last 8 bytes) | message 3 | -+---------------+--------+--------------------------+-----------+ -.fi - -.SH "SEE ALSO" - -.BR zmq_udp (7) -.BR zmq_tcp (7) -.BR zmq_ipc (7) -.BR zmq_inproc (7) -.BR zmq_setsockopt (3) - -.SH AUTHOR -Martin Sustrik - - diff --git a/man/man7/zmq_python.7 b/man/man7/zmq_python.7 deleted file mode 100644 index 45a3cfe..0000000 --- a/man/man7/zmq_python.7 +++ /dev/null @@ -1,9 +0,0 @@ -.TH zmq_python 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ Python API \- interface between 0MQ and Python applications -.SH SYNOPSIS -.SH DESCRIPTION -.SH "SEE ALSO" -.SH AUTHOR -Martin Sustrik - diff --git a/man/man7/zmq_tcp.7 b/man/man7/zmq_tcp.7 deleted file mode 100644 index 23c736b..0000000 --- a/man/man7/zmq_tcp.7 +++ /dev/null @@ -1,80 +0,0 @@ -.TH zmq_tcp 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ TCP Transport \- unicast transport over the network -.SH SYNOPSIS - -TCP is an ubiquitous unicast transport. When connecting distributed -applications, you will mostly use TCP transport. - -.SH CONNECTION STRING - -Connection string for TCP transport is "tcp://" followed by an IP address, -colon and port number. IP address can be either its numeric representation, -a NIC name or a hostname (resolved by DNS): - -.nf - tcp://192.168.0.111:5555 - tcp://myserver001:80 - tcp://lo:32768 -.fi - -Note that NIC names are not standardised by POSIX. They tend to be rather -arbitrary and platform dependent. Say, "eth0" on Linux would correspond to "en0" -on OSX and "e1000g" on Solaris. On Windows platform, as there are no short NIC -names available, you have to use numeric IP addresses instead. - -.SH WIRE FORMAT - -A message consists of a message length followed by message data. -Size of message data MUST correspond to the message length. - -For messages of 0 to 254 octets, the length is represented by single octet. - -For messages of 255 or more octets the length is represented by a single octet -%xFF followed by a 64-bit unsigned integer length in network byte order. - -The protocol can be defined by this BNF grammar: - -.nf - frame = length data - length = OCTET | escape 8*OCTET - escape = %xFF - data = *OCTET -.fi - -Binary layout of a message (up to 254 bytes long): - -.nf -0 1 2 3 -0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Message size | Message body ... | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Message body ... -+-+-+-+-+-+-+- ... - -Binary layout of a larger message: - -0 1 2 3 -0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| 0xff | Message size ... | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Message size ... | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Message size | Message body ... | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Message body ... -+-+-+-+-+-+-+-+ ... -.fi - -.SH "SEE ALSO" - -.BR zmq_udp (7) -.BR zmq_pgm (7) -.BR zmq_ipc (7) -.BR zmq_inproc (7) - -.SH AUTHOR -Martin Sustrik - diff --git a/man/man7/zmq_udp.7 b/man/man7/zmq_udp.7 deleted file mode 100644 index 5b9e6e1..0000000 --- a/man/man7/zmq_udp.7 +++ /dev/null @@ -1,45 +0,0 @@ -.TH zmq_udp 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals" -.SH NAME -0MQ UDP Transport \- reliable multicast transport -.SH SYNOPSIS - -UDP transport is exactly the same as PGM transport except that PGM packets -are encapsulated in UDP packets. Rationale for this transport is that user-space -implementation of PGM requires right to create raw sockets (PGM is located -directly on top of IP layer in the networking stack), which is often not -available. UDP encapsulation solves this problem, however, it adds some overhead -related to creating and transferring UDP packet headers. - -.SH CONNECTION STRING - -Connection string for UDP transport is "udp://" followed by an IP address -of the NIC to use, semicolon, IP address of the multicast group, colon and -port number. IP address of the NIC can be either its numeric representation -or the name of the NIC as reported by operating system. IP address of the -multicast group should be specified in the numeric representation. For example: - -.nf - udp://eth0;224.0.0.1:5555 - udp://lo;230.0.0.0:6666 - udp://192.168.0.111;224.0.0.1:5555 -.fi - -Note that NIC names are not standardised by POSIX. They tend to be rather -arbitrary and platform dependent. Say, "eth0" on Linux would correspond to "en0" -on OSX and "e1000g" on Solaris. On Windows platform, as there are no short NIC -names available, you have to use numeric IP addresses instead. - -.SH WIRE FORMAT - -Same as with PGM transport except for UDP packet headers. - -.SH "SEE ALSO" - -.BR zmq_pgm (7) -.BR zmq_tcp (7) -.BR zmq_ipc (7) -.BR zmq_inproc (7) - -.SH AUTHOR -Martin Sustrik - -- cgit v1.2.3