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:
commit
7cab423fc2
5
.gitignore
vendored
5
.gitignore
vendored
@ -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
|
||||
|
@ -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 \
|
||||
|
19
configure.in
19
configure.in
@ -50,9 +50,20 @@ on_mingw32="no"
|
||||
# Host speciffic checks
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
# Whether or not install manual pages.
|
||||
# Note that on MinGW manpages are not installed.
|
||||
# Determine whether or not documentation should be built.
|
||||
build_doc="yes"
|
||||
install_man="yes"
|
||||
if test ! -f "doc/zmq.html"; then
|
||||
# We are building from git.
|
||||
# Check for asciidoc and xmlto and don't build the docs if these are not installed.
|
||||
AC_CHECK_PROG(have_asciidoc, asciidoc, yes, no)
|
||||
AC_CHECK_PROG(have_xmlto, xmlto, yes, no)
|
||||
if test "x$have_asciidoc" = "xno" -o "x$have_xmlto" = "xno"; then
|
||||
build_doc="no"
|
||||
install_man="no"
|
||||
AC_MSG_WARN([You are building from git and asciidoc is not installed. Documentation will not be built or installed.])
|
||||
fi
|
||||
fi
|
||||
|
||||
case "${host_os}" in
|
||||
*linux*)
|
||||
@ -551,6 +562,7 @@ AM_CONDITIONAL(BUILD_CHAT, test "x$chat" = "xyes")
|
||||
AM_CONDITIONAL(ON_MINGW, test "x$on_mingw32" = "xyes")
|
||||
AM_CONDITIONAL(BUILD_PGM2_EXAMPLES, test "x$with_pgm2_examples" = "xyes")
|
||||
AM_CONDITIONAL(INSTALL_MAN, test "x$install_man" = "xyes")
|
||||
AM_CONDITIONAL(BUILD_DOC, test "x$build_doc" = "xyes")
|
||||
|
||||
AC_SUBST(stdint)
|
||||
AC_SUBST(inttypes)
|
||||
@ -565,7 +577,7 @@ AC_FUNC_MALLOC
|
||||
AC_TYPE_SIGNAL
|
||||
AC_CHECK_FUNCS(perror gettimeofday memset socket getifaddrs freeifaddrs)
|
||||
|
||||
AC_OUTPUT(Makefile src/Makefile man/Makefile bindings/python/Makefile \
|
||||
AC_OUTPUT(Makefile src/Makefile doc/Makefile bindings/python/Makefile \
|
||||
bindings/python/setup.py bindings/ruby/Makefile \
|
||||
bindings/java/Makefile perf/Makefile perf/c/Makefile perf/cpp/Makefile \
|
||||
perf/python/Makefile perf/ruby/Makefile perf/java/Makefile src/libzmq.pc \
|
||||
@ -615,6 +627,7 @@ AC_MSG_RESULT([ Queue: $queue])
|
||||
AC_MSG_RESULT([ Performance tests: $perf])
|
||||
AC_MSG_RESULT([ Examples:])
|
||||
AC_MSG_RESULT([ Chat: $chat])
|
||||
AC_MSG_RESULT([ Documentation: $build_doc])
|
||||
AC_MSG_RESULT([])
|
||||
AC_MSG_RESULT([ ******************************************************** ])
|
||||
AC_MSG_RESULT([])
|
||||
|
41
doc/Makefile.am
Normal file
41
doc/Makefile.am
Normal 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
34
doc/asciidoc.conf
Normal 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[]
|
@ -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
67
doc/zmq_bind.txt
Normal 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
52
doc/zmq_close.txt
Normal 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
63
doc/zmq_connect.txt
Normal 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
89
doc/zmq_cpp.txt
Normal 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>
|
@ -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
32
doc/zmq_forwarder.txt
Normal 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
61
doc/zmq_init.txt
Normal 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>
|
@ -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>
|
||||
|
@ -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
27
doc/zmq_java.txt
Normal 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
53
doc/zmq_msg_close.txt
Normal 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
60
doc/zmq_msg_copy.txt
Normal 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
50
doc/zmq_msg_data.txt
Normal 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
54
doc/zmq_msg_init.txt
Normal 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
67
doc/zmq_msg_init_data.txt
Normal 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
61
doc/zmq_msg_init_size.txt
Normal 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
55
doc/zmq_msg_move.txt
Normal 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
53
doc/zmq_msg_size.txt
Normal 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>
|
@ -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
85
doc/zmq_poll.txt
Normal 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
27
doc/zmq_python.txt
Normal 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
32
doc/zmq_queue.txt
Normal 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>
|
@ -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
77
doc/zmq_send.txt
Normal 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>
|
@ -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
126
doc/zmq_socket.txt
Normal 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
32
doc/zmq_streamer.txt
Normal 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
50
doc/zmq_strerror.txt
Normal 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>
|
@ -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
49
doc/zmq_term.txt
Normal 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>
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user