summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Lucina <mato@kotelna.sk>2010-02-10 16:18:46 +0100
committerMartin Lucina <mato@kotelna.sk>2010-02-10 16:18:46 +0100
commit354efc513fdb4096f8830e6c2e3e8f1311303e61 (patch)
treec8dec6949c70e6f41832e42326594ebb889b1ee2
parent2d44bf3644c8e12aa86c48e9da4df19bfa9ea703 (diff)
Convert documentation to AsciiDoc
-rw-r--r--.gitignore5
-rw-r--r--Makefile.am8
-rw-r--r--configure.in19
-rw-r--r--doc/Makefile.am41
-rw-r--r--doc/asciidoc.conf34
-rw-r--r--doc/zmq.txt (renamed from man/man7/zmq.7)162
-rw-r--r--doc/zmq_bind.txt67
-rw-r--r--doc/zmq_close.txt52
-rw-r--r--doc/zmq_connect.txt63
-rw-r--r--doc/zmq_cpp.txt89
-rw-r--r--doc/zmq_flush.txt (renamed from man/man3/zmq_flush.3)66
-rw-r--r--doc/zmq_forwarder.txt32
-rw-r--r--doc/zmq_init.txt61
-rw-r--r--doc/zmq_inproc.txt (renamed from man/man7/zmq_inproc.7)44
-rw-r--r--doc/zmq_ipc.txt (renamed from man/man7/zmq_ipc.7)40
-rw-r--r--doc/zmq_java.txt27
-rw-r--r--doc/zmq_msg_close.txt53
-rw-r--r--doc/zmq_msg_copy.txt60
-rw-r--r--doc/zmq_msg_data.txt50
-rw-r--r--doc/zmq_msg_init.txt54
-rw-r--r--doc/zmq_msg_init_data.txt67
-rw-r--r--doc/zmq_msg_init_size.txt61
-rw-r--r--doc/zmq_msg_move.txt55
-rw-r--r--doc/zmq_msg_size.txt53
-rw-r--r--doc/zmq_pgm.txt (renamed from man/man7/zmq_pgm.7)72
-rw-r--r--doc/zmq_poll.txt85
-rw-r--r--doc/zmq_python.txt27
-rw-r--r--doc/zmq_queue.txt32
-rw-r--r--doc/zmq_recv.txt (renamed from man/man3/zmq_recv.3)84
-rw-r--r--doc/zmq_send.txt77
-rw-r--r--doc/zmq_setsockopt.txt (renamed from man/man3/zmq_setsockopt.3)128
-rw-r--r--doc/zmq_socket.txt126
-rw-r--r--doc/zmq_streamer.txt32
-rw-r--r--doc/zmq_strerror.txt50
-rw-r--r--doc/zmq_tcp.txt (renamed from man/man7/zmq_tcp.7)49
-rw-r--r--doc/zmq_term.txt49
-rw-r--r--doc/zmq_udp.txt (renamed from man/man7/zmq_udp.7)41
-rw-r--r--man/Makefile.am22
-rw-r--r--man/convert2html.sh55
-rwxr-xr-xman/convert2pdf.sh88
-rw-r--r--man/man1/zmq_forwarder.111
-rw-r--r--man/man1/zmq_queue.111
-rw-r--r--man/man1/zmq_streamer.111
-rw-r--r--man/man3/zmq_bind.352
-rw-r--r--man/man3/zmq_close.330
-rw-r--r--man/man3/zmq_connect.349
-rw-r--r--man/man3/zmq_init.340
-rw-r--r--man/man3/zmq_msg_close.332
-rw-r--r--man/man3/zmq_msg_copy.343
-rw-r--r--man/man3/zmq_msg_data.327
-rw-r--r--man/man3/zmq_msg_init.333
-rw-r--r--man/man3/zmq_msg_init_data.355
-rw-r--r--man/man3/zmq_msg_init_size.344
-rw-r--r--man/man3/zmq_msg_move.338
-rw-r--r--man/man3/zmq_msg_size.330
-rw-r--r--man/man3/zmq_poll.371
-rw-r--r--man/man3/zmq_send.364
-rw-r--r--man/man3/zmq_socket.3110
-rw-r--r--man/man3/zmq_strerror.327
-rw-r--r--man/man3/zmq_term.325
-rw-r--r--man/man7/zmq_cl.7124
-rw-r--r--man/man7/zmq_cpp.7103
-rw-r--r--man/man7/zmq_java.79
-rw-r--r--man/man7/zmq_python.79
64 files changed, 1827 insertions, 1501 deletions
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)[\\]?(?P<name>linkzmq):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=
+
+ifdef::backend-docbook[]
+[linkzmq-inlinemacro]
+{0%{target}}
+{0#<citerefentry>}
+{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}
+{0#</citerefentry>}
+endif::backend-docbook[]
+
+ifdef::backend-xhtml11[]
+[linkzmq-inlinemacro]
+<a href="{target}.html">{target}{0?({0})}</a>
+endif::backend-xhtml11[]
+
+ifdef::doctype-manpage[]
+ifdef::backend-docbook[]
+[header]
+template::[header-declarations]
+<refentry>
+<refmeta>
+<refentrytitle>{mantitle}</refentrytitle>
+<manvolnum>{manvolnum}</manvolnum>
+<refmiscinfo class="source">0MQ</refmiscinfo>
+<refmiscinfo class="version">2.0.0</refmiscinfo>
+<refmiscinfo class="manual">0MQ Manual</refmiscinfo>
+</refmeta>
+<refnamediv>
+ <refname>{manname}</refname>
+ <refpurpose>{manpurpose}</refpurpose>
+</refnamediv>
+endif::backend-docbook[]
+endif::doctype-manpage[]
diff --git a/man/man7/zmq.7 b/doc/zmq.txt
index ed7e08b..0c911c3 100644
--- a/man/man7/zmq.7
+++ b/doc/zmq.txt
@@ -1,8 +1,14 @@
-.TH zmq 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals"
-.SH NAME
-0MQ \- a lightweight messaging kernel
-.SH SYNOPSIS
+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
@@ -25,19 +31,23 @@ microarchitectures.
0MQ is fully open sourced LGPL-licensed software.
-.SH CONTEXT
+
+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)
+Initialise 0MQ context::
+ linkzmq:zmq_init[3]
-Uninitialise 0MQ context:
-.BR zmq_term(3)
+Uninitialise 0MQ context::
+ linkzmq:zmq_term[3]
-.SH MESSAGES
+
+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
@@ -46,106 +56,120 @@ 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)
+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]
-Uninitialise a message:
-.BR zmq_msg_close(3)
+Access message content::
+ linkzmq:zmq_msg_data[3]
+ linkzmq:zmq_msg_size[3]
-Access message content:
-.BR zmq_msg_data(3)
-.BR zmq_msg_size(3)
+Message manipulation::
+ linkzmq:zmq_msg_copy[3]
+ linkzmq:zmq_msg_move[3]
-Message manipulation:
-.BR zmq_msg_copy(3)
-.BR zmq_msg_move(3)
-.SH SOCKETS
+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)
+Creating a socket::
+ linkzmq:zmq_socket[3]
+
+Closing a socket::
+ linkzmq:zmq_close[3]
-Closing a socket:
-.BR zmq_close(3)
+Setting socket options::
+ linkzmq:zmq_setsockopt[3]
-Setting socket options:
-.BR zmq_setsockopt(3)
+Establishing a message flow::
+ linkzmq:zmq_bind[3]
+ linkzmq:zmq_connect[3]
-Establishing a message flow:
-.BR zmq_bind(3)
-.BR zmq_connect(3)
+Sending & receiving messages::
+ linkzmq:zmq_send[3]
+ linkzmq:zmq_flush[3]
+ linkzmq:zmq_recv[3]
-Sending & receiving messages:
-.BR zmq_send(3)
-.BR zmq_flush(3)
-.BR zmq_recv(3)
-.SH MULTIPLEXING
+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)
+Poll for I/O events::
+ linkzmq:zmq_poll[3]
-.SH ERROR HANDLING
+
+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)
+Convert error code into human readable string::
+ linkzmq:zmq_strerror[3]
+
-.SH TRANSPORTS
+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)
+TCP/IP transport::
+ linkzmq:zmq_tcp[7]
-UDP reliable multicast transport:
-.BR zmq_udp(7)
+UDP reliable multicast transport::
+ linkzmq:zmq_udp[7]
-PGM reliable multicast transport:
-.BR zmq_pgm(7)
+PGM reliable multicast transport::
+ linkzmq:zmq_pgm[7]
-Inter-process transport:
-.BR zmq_ipc (7)
+Inter-process transport::
+ linkzmq:zmq_ipc[7]
-In-process (inter-thread) transport:
-.BR zmq_inproc(7)
+In-process (inter-thread) transport::
+ linkzmq:zmq_inproc[7]
-.SH DEVICES
+
+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)
+Forwarder device for PUB/SUB messaging::
+ linkzmq:zmq_forwarder[1]
+
+Streamer device for UPSTREAM/DOWNSTREAM messaging::
+ linkzmq:zmq_streamer[1]
-Streamer device for UPSTREAM/DOWNSTREAM messaging:
-.BR zmq_streamer(1)
-.SH LANGUAGES
+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++:
-.BR zmq_cpp(7)
+$$C++$$::
+ linkzmq:zmq_cpp[7]
-Common Lisp:
-.BR zmq_cl(7)
+Java::
+ linkzmq:zmq_java[7]
-Python:
-.BR zmq_python(7)
+Python::
+ linkzmq:zmq_python[7]
-Ruby:
-.BR zmq_ruby(7)
-.SH AUTHOR
+AUTHOR
+------
Martin Sustrik <sustrik at 250bpm dot com>
-
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
diff --git a/man/man3/zmq_flush.3 b/doc/zmq_flush.txt
index eb2a719..3a2cd37 100644
--- a/man/man3/zmq_flush.3
+++ b/doc/zmq_flush.txt
@@ -1,37 +1,59 @@
-.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
+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
-.IR zmq_send
-without ZMQ_NOFLUSH flag automatically flushes all previously pre-sent messages.
-.SH RETURN VALUE
+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
-.IR errno
-to the appropriate value.
-.SH ERRORS
-.IP "\fBENOTSUP\fP"
+sets 'errno' to the appropriate value.
+
+
+ERRORS
+------
+*ENOTSUP*::
function isn't supported by particular socket type.
-.IP "\fBEFSM\fP"
+*EFSM*::
function cannot be called at the moment, because socket is not in the
approprite state.
-.SH EXAMPLE
-.nf
+
+
+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);
-.fi
-.SH SEE ALSO
-.BR zmq_send (3)
-.SH AUTHOR
+----
+
+
+SEE ALSO
+--------
+linkzmq:zmq_send[3]
+
+
+AUTHOR
+------
Martin Sustrik <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
diff --git a/man/man7/zmq_inproc.7 b/doc/zmq_inproc.txt
index 279d9b5..7861201 100644
--- a/man/man7/zmq_inproc.7
+++ b/doc/zmq_inproc.txt
@@ -1,42 +1,50 @@
-.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
+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 (
-.IR zmq_init
-) with zero I/O worker threads.
+the library (linkzmq:zmq_init[3]) with zero I/O worker threads.
-.SH CONNECTION STRING
+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
+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)
+SEE ALSO
+--------
+linkzmq:zmq_ipc[7]
+linkzmq:zmq_tcp[7]
+linkzmq:zmq_udp[7]
+linkzmq:zmq_pgm[7]
-.SH AUTHOR
-Martin Sustrik <sustrik at 250bpm dot com>
+AUTHOR
+------
+Martin Sustrik <sustrik at 250bpm dot com>
diff --git a/man/man7/zmq_ipc.7 b/doc/zmq_ipc.txt
index b8c08e5..c3980f6 100644
--- a/man/man7/zmq_ipc.7
+++ b/doc/zmq_ipc.txt
@@ -1,34 +1,44 @@
-.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
+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.
-.SH CONNECTION STRING
+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
+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)
+SEE ALSO
+--------
+linkzmq:zmq_inproc[7]
+linkzmq:zmq_tcp[7]
+linkzmq:zmq_udp[7]
+linkzmq:zmq_pgm[7]
-.SH AUTHOR
-Martin Sustrik <sustrik at 250bpm dot com>
+AUTHOR
+------
+Martin Sustrik <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
diff --git a/man/man7/zmq_pgm.7 b/doc/zmq_pgm.txt
index e1230ae..d0e2622 100644
--- a/man/man7/zmq_pgm.7
+++ b/doc/zmq_pgm.txt
@@ -1,8 +1,14 @@
-.TH zmq_pgm 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals"
-.SH NAME
-0MQ PGM Transport \- reliable multicast transport
-.SH SYNOPSIS
+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,
@@ -18,40 +24,41 @@ 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
+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.
+is to use UDP transport, linkzmq:zmq_udp[7], that stacks PGM on top of UDP and
+thus needs no special privileges.
-.SH CONNECTION STRING
+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.
+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.
-.SH WIRE FORMAT
+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.
+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
@@ -62,15 +69,15 @@ 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) |
+---------------+--------+-----------+-----------------------------+
@@ -82,17 +89,18 @@ Following example shows how messages are arranged in subsequent packets:
+---------------+--------+--------------------------+-----------+
| 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 <sustrik at 250bpm dot com>
+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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
diff --git a/man/man3/zmq_recv.3 b/doc/zmq_recv.txt
index 8a961bb..0365d23 100644
--- a/man/man3/zmq_recv.3
+++ b/doc/zmq_recv.txt
@@ -1,52 +1,66 @@
-.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
+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.
-.IP "\fBZMQ_NOBLOCK\fP"
+*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
-.IR errno
-set to EAGAIN.
+error should be returned with 'errno' set to EAGAIN.
-.SH RETURN VALUE
+
+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"
+sets 'errno' to the appropriate value.
+
+
+ERRORS
+------
+*EAGAIN*::
it's a non-blocking receive and there's no message available at the moment.
-.IP "\fBENOTSUP\fP"
+*ENOTSUP*::
function isn't supported by particular socket type.
-.IP "\fBEFSM\fP"
+*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).
-.SH EXAMPLE
-.nf
+
+
+EXAMPLE
+-------
+----
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
+----
+
+
+SEE ALSO
+--------
+linkzmq:zmq_send[3]
+linkzmq:zmq_msg_init[3]
+linkzmq:zmq_msg_data[3]
+linkzmq:zmq_msg_size[3]
+
+
+AUTHOR
+------
Martin Sustrik <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
diff --git a/man/man3/zmq_setsockopt.3 b/doc/zmq_setsockopt.txt
index f1dd9cb..549a2de 100644
--- a/man/man3/zmq_setsockopt.3
+++ b/doc/zmq_setsockopt.txt
@@ -1,42 +1,49 @@
-.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"
+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
-.IP "\fBZMQ_LWM\fP"
+*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
-.IP "\fBZMQ_SWAP\fP"
+*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
-.IP "\fBZMQ_AFFINITY\fP"
+*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
@@ -44,94 +51,105 @@ 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"
+*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
-.IP "\fBZMQ_SUBSCRIBE\fP"
+*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
-.IP "\fBZMQ_UNSUBSCRIBE\fP"
+*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
-.IP "\fBZMQ_RATE\fP"
+*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
-.IP "\fBZMQ_RECOVERY_IVL\fP"
+*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
-.IP "\fBZMQ_MCAST_LOOP\fP"
+*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
-.IP "\fBZMQ_SNDBUF\fP"
+*ZMQ_SNDBUF*::
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.
-
+'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"
+*ZMQ_RCVBUF*::
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.
-
+'SO_RCVBUF' POSIX socket option. Value of zero means leaving the OS default
+unchanged.
++
Type: uint64_t Unit: bytes Default: 0
-.SH RETURN VALUE
+
+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"
+sets 'errno' to the appropriate value.
+
+
+ERRORS
+------
+*EINVAL*::
unknown option, a value with incorrect length or invalid value.
-.SH EXAMPLE
-.nf
+
+
+EXAMPLE
+-------
+----
int rc = zmq_setsockopt (s, ZMQ_SUBSCRIBE, "", 0);
assert (rc == 0);
-.fi
-.SH SEE ALSO
-.BR zmq_socket (3)
-.BR zmq (7)
+----
+
+
+SEE ALSO
+--------
+linkzmq:zmq_socket[3]
+linkzmq:zmq[7]
+
-.SH AUTHOR
+AUTHOR
+------
Martin Sustrik <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
diff --git a/man/man7/zmq_tcp.7 b/doc/zmq_tcp.txt
index 23c736b..98f1219 100644
--- a/man/man7/zmq_tcp.7
+++ b/doc/zmq_tcp.txt
@@ -1,30 +1,38 @@
-.TH zmq_tcp 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals"
-.SH NAME
-0MQ TCP Transport \- unicast transport over the network
-.SH SYNOPSIS
+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.
-.SH CONNECTION STRING
+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
+WIRE FORMAT
+-----------
A message consists of a message length followed by message data.
Size of message data MUST correspond to the message length.
@@ -35,16 +43,16 @@ For messages of 255 or more octets the length is represented by a single octet
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -52,9 +60,11 @@ Binary layout of a message (up to 254 bytes long):
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -66,15 +76,18 @@ Binary layout of a larger message:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message body ...
+-+-+-+-+-+-+-+ ...
-.fi
+----
+
-.SH "SEE ALSO"
+SEE ALSO
+--------
+linkzmq:zmq_udp[7]
+linkzmq:zmq_pgm[7]
+linkzmq:zmq_ipc[7]
+linkzmq:zmq_inproc[7]
-.BR zmq_udp (7)
-.BR zmq_pgm (7)
-.BR zmq_ipc (7)
-.BR zmq_inproc (7)
-.SH AUTHOR
+AUTHOR
+------
Martin Sustrik <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
diff --git a/man/man7/zmq_udp.7 b/doc/zmq_udp.txt
index 5b9e6e1..ecc6bdf 100644
--- a/man/man7/zmq_udp.7
+++ b/doc/zmq_udp.txt
@@ -1,8 +1,14 @@
-.TH zmq_udp 7 "" "(c)2007-2010 iMatix Corporation" "0MQ User Manuals"
-.SH NAME
-0MQ UDP Transport \- reliable multicast transport
-.SH SYNOPSIS
+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
@@ -10,36 +16,41 @@ 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
+-----------------
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
+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.
-.SH WIRE FORMAT
+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)
+SEE ALSO
+--------
+linkzmq:zmq_pgm[7]
+linkzmq:zmq_tcp[7]
+linkzmq:zmq_ipc[7]
+linkzmq:zmq_inproc[7]
+
-.SH AUTHOR
+AUTHOR
+------
Martin Sustrik <sustrik at 250bpm dot com>
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 <http://www.gnu.org/licenses/>.
-
-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 <http://www.gnu.org/licenses/>.
-
-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 <sustrik at 250bpm dot com>
-
-
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 <sustrik at 250bpm dot com>
-
-
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 <sustrik at 250bpm dot com>
-
-
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>,
-Vitaly Mayatskikh <v dot mayatskih at gmail dot com>
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 <sustrik at 250bpm dot com>
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 <sustrik at 250bpm dot com>
-
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 <sustrik at 250bpm dot com>
-