0
0
mirror of https://github.com/zeromq/libzmq.git synced 2024-12-29 16:45:51 +08:00

Merge branch 'master' of github.com:sustrik/zeromq2

This commit is contained in:
Martin Hurton 2010-02-10 17:14:21 +01:00
commit 7cab423fc2
66 changed files with 1833 additions and 1503 deletions

5
.gitignore vendored
View File

@ -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

View File

@ -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 \

View File

@ -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([])

41
doc/Makefile.am Normal file
View File

@ -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 $<

34
doc/asciidoc.conf Normal file
View File

@ -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[]

View File

@ -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:
.BR zmq_msg_close(3)
Uninitialise a message::
linkzmq:zmq_msg_close[3]
Access message content:
.BR zmq_msg_data(3)
.BR zmq_msg_size(3)
Access message content::
linkzmq:zmq_msg_data[3]
linkzmq:zmq_msg_size[3]
Message manipulation:
.BR zmq_msg_copy(3)
.BR zmq_msg_move(3)
Message manipulation::
linkzmq:zmq_msg_copy[3]
linkzmq: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:
.BR zmq_close(3)
Closing a socket::
linkzmq:zmq_close[3]
Setting socket options:
.BR zmq_setsockopt(3)
Setting socket options::
linkzmq:zmq_setsockopt[3]
Establishing a message flow:
.BR zmq_bind(3)
.BR zmq_connect(3)
Establishing a message flow::
linkzmq:zmq_bind[3]
linkzmq:zmq_connect[3]
Sending & receiving messages:
.BR zmq_send(3)
.BR zmq_flush(3)
.BR zmq_recv(3)
Sending & receiving messages::
linkzmq:zmq_send[3]
linkzmq:zmq_flush[3]
linkzmq: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:
.BR zmq_streamer(1)
.SH LANGUAGES
Streamer device for UPSTREAM/DOWNSTREAM messaging::
linkzmq:zmq_streamer[1]
Forwarder device for REQ/REP messaging::
linkzmq:zmq_queue[1]
LANGUAGES
---------
0MQ manual pages provide info on C API. To find out how the your
favourite language API maps to C API and thus how to find relevant manual pages,
see following articles:
C++:
.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>

67
doc/zmq_bind.txt Normal file
View File

@ -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>

52
doc/zmq_close.txt Normal file
View File

@ -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>

63
doc/zmq_connect.txt Normal file
View File

@ -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>

89
doc/zmq_cpp.txt Normal file
View File

@ -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>

View File

@ -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>

32
doc/zmq_forwarder.txt Normal file
View File

@ -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>

61
doc/zmq_init.txt Normal file
View File

@ -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>

View File

@ -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
AUTHOR
------
Martin Sustrik <sustrik at 250bpm dot com>

View File

@ -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
AUTHOR
------
Martin Sustrik <sustrik at 250bpm dot com>

27
doc/zmq_java.txt Normal file
View File

@ -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>

53
doc/zmq_msg_close.txt Normal file
View File

@ -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>

60
doc/zmq_msg_copy.txt Normal file
View File

@ -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>

50
doc/zmq_msg_data.txt Normal file
View File

@ -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>

54
doc/zmq_msg_init.txt Normal file
View File

@ -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>

67
doc/zmq_msg_init_data.txt Normal file
View File

@ -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>

61
doc/zmq_msg_init_size.txt Normal file
View File

@ -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>

55
doc/zmq_msg_move.txt Normal file
View File

@ -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>

53
doc/zmq_msg_size.txt Normal file
View File

@ -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>

View File

@ -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)
SEE ALSO
--------
linkzmq:zmq_udp[7]
linkzmq:zmq_tcp[7]
linkzmq:zmq_ipc[7]
linkzmq:zmq_inproc[7]
linkzmq:zmq_setsockopt[3]
.SH AUTHOR
AUTHOR
------
Martin Sustrik <sustrik at 250bpm dot com>

85
doc/zmq_poll.txt Normal file
View File

@ -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>

27
doc/zmq_python.txt Normal file
View File

@ -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>

32
doc/zmq_queue.txt Normal file
View File

@ -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>

View File

@ -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>

77
doc/zmq_send.txt Normal file
View File

@ -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>

View File

@ -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.
zmq_setsockopt(3)
=================
.IP "\fBZMQ_HWM\fP"
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)
----
.SH AUTHOR
SEE ALSO
--------
linkzmq:zmq_socket[3]
linkzmq:zmq[7]
AUTHOR
------
Martin Sustrik <sustrik at 250bpm dot com>

126
doc/zmq_socket.txt Normal file
View File

@ -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>

32
doc/zmq_streamer.txt Normal file
View File

@ -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>

50
doc/zmq_strerror.txt Normal file
View File

@ -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>

View File

@ -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"
.BR zmq_udp (7)
.BR zmq_pgm (7)
.BR zmq_ipc (7)
.BR zmq_inproc (7)
SEE ALSO
--------
linkzmq:zmq_udp[7]
linkzmq:zmq_pgm[7]
linkzmq:zmq_ipc[7]
linkzmq:zmq_inproc[7]
.SH AUTHOR
AUTHOR
------
Martin Sustrik <sustrik at 250bpm dot com>

49
doc/zmq_term.txt Normal file
View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -249,10 +249,10 @@ void zmq::fd_signaler_t::signal (int signal_)
uint64_t zmq::fd_signaler_t::poll ()
{
// Set the reader to blocking mode.
int flags = fcntl (fd, F_GETFL, 0);
int flags = fcntl (r, F_GETFL, 0);
if (flags == -1)
flags = 0;
int rc = fcntl (fd, F_SETFL, flags & ~O_NONBLOCK);
int rc = fcntl (r, F_SETFL, flags & ~O_NONBLOCK);
errno_assert (rc != -1);
// Poll for events.

View File

@ -268,7 +268,11 @@ zmq::fd_t zmq::tcp_connecter_t::connect ()
// Following code should handle both Berkeley-derived socket
// implementations and Solaris.
int err = 0;
socklen_t len = sizeof err;
#if defined ZMQ_HAVE_HPUX
int len = sizeof (err);
#else
socklen_t len = sizeof (err);
#endif
int rc = getsockopt (s, SOL_SOCKET, SO_ERROR, (char*) &err, &len);
if (rc == -1)
err = errno;