libzmq 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +703 -0
- data/README.md +31 -0
- data/lib/libzmq.rb +17 -0
- data/lib/libzmq/ffi-rzmq.rb +3 -0
- data/libzmq/Makefile +5 -0
- data/libzmq/extconf.rb +24 -0
- data/libzmq/zeromq-2.1.7/AUTHORS +92 -0
- data/libzmq/zeromq-2.1.7/COPYING +674 -0
- data/libzmq/zeromq-2.1.7/COPYING.LESSER +206 -0
- data/libzmq/zeromq-2.1.7/ChangeLog +15620 -0
- data/libzmq/zeromq-2.1.7/INSTALL +237 -0
- data/libzmq/zeromq-2.1.7/MAINTAINERS +56 -0
- data/libzmq/zeromq-2.1.7/Makefile.am +42 -0
- data/libzmq/zeromq-2.1.7/Makefile.in +779 -0
- data/libzmq/zeromq-2.1.7/NEWS +275 -0
- data/libzmq/zeromq-2.1.7/README +39 -0
- data/libzmq/zeromq-2.1.7/acinclude.m4 +582 -0
- data/libzmq/zeromq-2.1.7/aclocal.m4 +1206 -0
- data/libzmq/zeromq-2.1.7/autogen.sh +45 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/Makefile.am +8 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/Makefile.in +390 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/c_local_lat/c_local_lat.vcproj +176 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/c_local_thr/c_local_thr.vcproj +176 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/c_remote_lat/c_remote_lat.vcproj +176 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/c_remote_thr/c_remote_thr.vcproj +176 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/libzmq/libzmq.vcproj +783 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/msvc.sln +89 -0
- data/libzmq/zeromq-2.1.7/builds/msvc/platform.hpp +32 -0
- data/libzmq/zeromq-2.1.7/builds/redhat/zeromq.spec.in +139 -0
- data/libzmq/zeromq-2.1.7/config/compile +143 -0
- data/libzmq/zeromq-2.1.7/config/config.guess +1502 -0
- data/libzmq/zeromq-2.1.7/config/config.sub +1714 -0
- data/libzmq/zeromq-2.1.7/config/depcomp +630 -0
- data/libzmq/zeromq-2.1.7/config/install-sh +520 -0
- data/libzmq/zeromq-2.1.7/config/libtool.m4 +7377 -0
- data/libzmq/zeromq-2.1.7/config/ltmain.sh +8413 -0
- data/libzmq/zeromq-2.1.7/config/ltoptions.m4 +368 -0
- data/libzmq/zeromq-2.1.7/config/ltsugar.m4 +123 -0
- data/libzmq/zeromq-2.1.7/config/ltversion.m4 +23 -0
- data/libzmq/zeromq-2.1.7/config/lt~obsolete.m4 +92 -0
- data/libzmq/zeromq-2.1.7/config/missing +376 -0
- data/libzmq/zeromq-2.1.7/configure +21645 -0
- data/libzmq/zeromq-2.1.7/configure.in +380 -0
- data/libzmq/zeromq-2.1.7/doc/Makefile.am +46 -0
- data/libzmq/zeromq-2.1.7/doc/Makefile.in +546 -0
- data/libzmq/zeromq-2.1.7/doc/asciidoc.conf +56 -0
- data/libzmq/zeromq-2.1.7/doc/zmq.7 +242 -0
- data/libzmq/zeromq-2.1.7/doc/zmq.html +846 -0
- data/libzmq/zeromq-2.1.7/doc/zmq.txt +218 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_bind.3 +166 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_bind.html +746 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_bind.txt +91 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_close.3 +81 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_close.html +645 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_close.txt +52 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_connect.3 +161 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_connect.html +732 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_connect.txt +89 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_cpp.7 +410 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_cpp.html +765 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_cpp.txt +212 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_device.3 +140 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_device.html +736 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_device.txt +138 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_epgm.7 +209 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_epgm.html +749 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_epgm.txt +162 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_errno.3 +78 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_errno.html +634 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_errno.txt +50 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.3 +944 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.html +1713 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.txt +407 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_init.3 +71 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_init.html +635 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_init.txt +51 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_inproc.7 +115 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_inproc.html +669 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_inproc.txt +89 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_ipc.7 +109 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_ipc.html +662 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_ipc.txt +80 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.3 +81 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.html +647 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.txt +55 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.3 +95 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.html +656 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.txt +57 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.3 +76 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.html +633 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.txt +48 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.3 +110 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.html +656 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.txt +65 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.3 +138 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.html +678 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.txt +83 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.3 +97 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.html +656 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.txt +58 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.3 +79 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.html +645 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.txt +52 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.3 +76 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.html +633 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.txt +48 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_pgm.7 +209 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_pgm.html +749 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_pgm.txt +162 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_poll.3 +204 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_poll.html +755 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_poll.txt +132 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_recv.3 +172 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_recv.html +746 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_recv.txt +121 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_send.3 +185 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_send.html +755 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_send.txt +120 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.3 +878 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.html +1603 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.txt +382 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_socket.3 +779 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_socket.html +1424 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_socket.txt +342 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_strerror.3 +78 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_strerror.html +634 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_strerror.txt +55 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_tcp.7 +244 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_tcp.html +755 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_tcp.txt +162 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_term.3 +135 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_term.html +672 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_term.txt +65 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_version.3 +78 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_version.html +632 -0
- data/libzmq/zeromq-2.1.7/doc/zmq_version.txt +53 -0
- data/libzmq/zeromq-2.1.7/foreign/openpgm/Makefile.am +8 -0
- data/libzmq/zeromq-2.1.7/foreign/openpgm/Makefile.in +588 -0
- data/libzmq/zeromq-2.1.7/foreign/openpgm/libpgm-5.1.115~dfsg.tar.gz +0 -0
- data/libzmq/zeromq-2.1.7/foreign/xmlParser/xmlParser.cpp +2923 -0
- data/libzmq/zeromq-2.1.7/foreign/xmlParser/xmlParser.hpp +762 -0
- data/libzmq/zeromq-2.1.7/include/zmq.h +269 -0
- data/libzmq/zeromq-2.1.7/include/zmq.hpp +301 -0
- data/libzmq/zeromq-2.1.7/include/zmq_utils.h +64 -0
- data/libzmq/zeromq-2.1.7/perf/Makefile.am +21 -0
- data/libzmq/zeromq-2.1.7/perf/Makefile.in +566 -0
- data/libzmq/zeromq-2.1.7/perf/inproc_lat.cpp +232 -0
- data/libzmq/zeromq-2.1.7/perf/inproc_thr.cpp +246 -0
- data/libzmq/zeromq-2.1.7/perf/local_lat.cpp +108 -0
- data/libzmq/zeromq-2.1.7/perf/local_thr.cpp +138 -0
- data/libzmq/zeromq-2.1.7/perf/remote_lat.cpp +121 -0
- data/libzmq/zeromq-2.1.7/perf/remote_thr.cpp +104 -0
- data/libzmq/zeromq-2.1.7/src/Makefile.am +155 -0
- data/libzmq/zeromq-2.1.7/src/Makefile.in +1320 -0
- data/libzmq/zeromq-2.1.7/src/array.hpp +147 -0
- data/libzmq/zeromq-2.1.7/src/atomic_counter.hpp +164 -0
- data/libzmq/zeromq-2.1.7/src/atomic_ptr.hpp +159 -0
- data/libzmq/zeromq-2.1.7/src/blob.hpp +34 -0
- data/libzmq/zeromq-2.1.7/src/clock.cpp +118 -0
- data/libzmq/zeromq-2.1.7/src/clock.hpp +60 -0
- data/libzmq/zeromq-2.1.7/src/command.cpp +39 -0
- data/libzmq/zeromq-2.1.7/src/command.hpp +147 -0
- data/libzmq/zeromq-2.1.7/src/config.hpp +88 -0
- data/libzmq/zeromq-2.1.7/src/connect_session.cpp +119 -0
- data/libzmq/zeromq-2.1.7/src/connect_session.hpp +65 -0
- data/libzmq/zeromq-2.1.7/src/ctx.cpp +322 -0
- data/libzmq/zeromq-2.1.7/src/ctx.hpp +159 -0
- data/libzmq/zeromq-2.1.7/src/decoder.cpp +129 -0
- data/libzmq/zeromq-2.1.7/src/decoder.hpp +207 -0
- data/libzmq/zeromq-2.1.7/src/device.cpp +120 -0
- data/libzmq/zeromq-2.1.7/src/device.hpp +32 -0
- data/libzmq/zeromq-2.1.7/src/devpoll.cpp +190 -0
- data/libzmq/zeromq-2.1.7/src/devpoll.hpp +100 -0
- data/libzmq/zeromq-2.1.7/src/dist.cpp +200 -0
- data/libzmq/zeromq-2.1.7/src/dist.hpp +90 -0
- data/libzmq/zeromq-2.1.7/src/encoder.cpp +90 -0
- data/libzmq/zeromq-2.1.7/src/encoder.hpp +184 -0
- data/libzmq/zeromq-2.1.7/src/epoll.cpp +177 -0
- data/libzmq/zeromq-2.1.7/src/epoll.hpp +96 -0
- data/libzmq/zeromq-2.1.7/src/err.cpp +238 -0
- data/libzmq/zeromq-2.1.7/src/err.hpp +145 -0
- data/libzmq/zeromq-2.1.7/src/fd.hpp +45 -0
- data/libzmq/zeromq-2.1.7/src/fq.cpp +164 -0
- data/libzmq/zeromq-2.1.7/src/fq.hpp +80 -0
- data/libzmq/zeromq-2.1.7/src/i_engine.hpp +53 -0
- data/libzmq/zeromq-2.1.7/src/i_inout.hpp +50 -0
- data/libzmq/zeromq-2.1.7/src/i_poll_events.hpp +46 -0
- data/libzmq/zeromq-2.1.7/src/io_object.cpp +107 -0
- data/libzmq/zeromq-2.1.7/src/io_object.hpp +78 -0
- data/libzmq/zeromq-2.1.7/src/io_thread.cpp +109 -0
- data/libzmq/zeromq-2.1.7/src/io_thread.hpp +88 -0
- data/libzmq/zeromq-2.1.7/src/ip.cpp +339 -0
- data/libzmq/zeromq-2.1.7/src/ip.hpp +68 -0
- data/libzmq/zeromq-2.1.7/src/kqueue.cpp +194 -0
- data/libzmq/zeromq-2.1.7/src/kqueue.hpp +103 -0
- data/libzmq/zeromq-2.1.7/src/lb.cpp +174 -0
- data/libzmq/zeromq-2.1.7/src/lb.hpp +79 -0
- data/libzmq/zeromq-2.1.7/src/libzmq.pc.in +10 -0
- data/libzmq/zeromq-2.1.7/src/likely.hpp +33 -0
- data/libzmq/zeromq-2.1.7/src/mailbox.cpp +382 -0
- data/libzmq/zeromq-2.1.7/src/mailbox.hpp +62 -0
- data/libzmq/zeromq-2.1.7/src/msg_content.hpp +52 -0
- data/libzmq/zeromq-2.1.7/src/mutex.hpp +121 -0
- data/libzmq/zeromq-2.1.7/src/named_session.cpp +85 -0
- data/libzmq/zeromq-2.1.7/src/named_session.hpp +57 -0
- data/libzmq/zeromq-2.1.7/src/object.cpp +467 -0
- data/libzmq/zeromq-2.1.7/src/object.hpp +127 -0
- data/libzmq/zeromq-2.1.7/src/options.cpp +336 -0
- data/libzmq/zeromq-2.1.7/src/options.hpp +87 -0
- data/libzmq/zeromq-2.1.7/src/own.cpp +214 -0
- data/libzmq/zeromq-2.1.7/src/own.hpp +140 -0
- data/libzmq/zeromq-2.1.7/src/pair.cpp +180 -0
- data/libzmq/zeromq-2.1.7/src/pair.hpp +76 -0
- data/libzmq/zeromq-2.1.7/src/pgm_receiver.cpp +259 -0
- data/libzmq/zeromq-2.1.7/src/pgm_receiver.hpp +129 -0
- data/libzmq/zeromq-2.1.7/src/pgm_sender.cpp +215 -0
- data/libzmq/zeromq-2.1.7/src/pgm_sender.hpp +105 -0
- data/libzmq/zeromq-2.1.7/src/pgm_socket.cpp +705 -0
- data/libzmq/zeromq-2.1.7/src/pgm_socket.hpp +118 -0
- data/libzmq/zeromq-2.1.7/src/pipe.cpp +409 -0
- data/libzmq/zeromq-2.1.7/src/pipe.hpp +214 -0
- data/libzmq/zeromq-2.1.7/src/platform.hpp.in +228 -0
- data/libzmq/zeromq-2.1.7/src/poll.cpp +180 -0
- data/libzmq/zeromq-2.1.7/src/poll.hpp +104 -0
- data/libzmq/zeromq-2.1.7/src/poller.hpp +73 -0
- data/libzmq/zeromq-2.1.7/src/poller_base.cpp +99 -0
- data/libzmq/zeromq-2.1.7/src/poller_base.hpp +84 -0
- data/libzmq/zeromq-2.1.7/src/pub.cpp +31 -0
- data/libzmq/zeromq-2.1.7/src/pub.hpp +44 -0
- data/libzmq/zeromq-2.1.7/src/pull.cpp +61 -0
- data/libzmq/zeromq-2.1.7/src/pull.hpp +60 -0
- data/libzmq/zeromq-2.1.7/src/push.cpp +62 -0
- data/libzmq/zeromq-2.1.7/src/push.hpp +59 -0
- data/libzmq/zeromq-2.1.7/src/reaper.cpp +121 -0
- data/libzmq/zeromq-2.1.7/src/reaper.hpp +77 -0
- data/libzmq/zeromq-2.1.7/src/rep.cpp +131 -0
- data/libzmq/zeromq-2.1.7/src/rep.hpp +59 -0
- data/libzmq/zeromq-2.1.7/src/req.cpp +121 -0
- data/libzmq/zeromq-2.1.7/src/req.hpp +58 -0
- data/libzmq/zeromq-2.1.7/src/select.cpp +211 -0
- data/libzmq/zeromq-2.1.7/src/select.hpp +116 -0
- data/libzmq/zeromq-2.1.7/src/semaphore.hpp +189 -0
- data/libzmq/zeromq-2.1.7/src/session.cpp +347 -0
- data/libzmq/zeromq-2.1.7/src/session.hpp +150 -0
- data/libzmq/zeromq-2.1.7/src/socket_base.cpp +811 -0
- data/libzmq/zeromq-2.1.7/src/socket_base.hpp +207 -0
- data/libzmq/zeromq-2.1.7/src/stdint.hpp +63 -0
- data/libzmq/zeromq-2.1.7/src/sub.cpp +75 -0
- data/libzmq/zeromq-2.1.7/src/sub.hpp +50 -0
- data/libzmq/zeromq-2.1.7/src/swap.cpp +325 -0
- data/libzmq/zeromq-2.1.7/src/swap.hpp +123 -0
- data/libzmq/zeromq-2.1.7/src/tcp_connecter.cpp +310 -0
- data/libzmq/zeromq-2.1.7/src/tcp_connecter.hpp +81 -0
- data/libzmq/zeromq-2.1.7/src/tcp_listener.cpp +371 -0
- data/libzmq/zeromq-2.1.7/src/tcp_listener.hpp +73 -0
- data/libzmq/zeromq-2.1.7/src/tcp_socket.cpp +228 -0
- data/libzmq/zeromq-2.1.7/src/tcp_socket.hpp +72 -0
- data/libzmq/zeromq-2.1.7/src/thread.cpp +97 -0
- data/libzmq/zeromq-2.1.7/src/thread.hpp +78 -0
- data/libzmq/zeromq-2.1.7/src/transient_session.cpp +41 -0
- data/libzmq/zeromq-2.1.7/src/transient_session.hpp +52 -0
- data/libzmq/zeromq-2.1.7/src/trie.cpp +181 -0
- data/libzmq/zeromq-2.1.7/src/trie.hpp +59 -0
- data/libzmq/zeromq-2.1.7/src/uuid.cpp +233 -0
- data/libzmq/zeromq-2.1.7/src/uuid.hpp +111 -0
- data/libzmq/zeromq-2.1.7/src/windows.hpp +79 -0
- data/libzmq/zeromq-2.1.7/src/wire.hpp +99 -0
- data/libzmq/zeromq-2.1.7/src/xpub.cpp +76 -0
- data/libzmq/zeromq-2.1.7/src/xpub.hpp +61 -0
- data/libzmq/zeromq-2.1.7/src/xrep.cpp +337 -0
- data/libzmq/zeromq-2.1.7/src/xrep.hpp +116 -0
- data/libzmq/zeromq-2.1.7/src/xreq.cpp +74 -0
- data/libzmq/zeromq-2.1.7/src/xreq.hpp +65 -0
- data/libzmq/zeromq-2.1.7/src/xsub.cpp +172 -0
- data/libzmq/zeromq-2.1.7/src/xsub.hpp +80 -0
- data/libzmq/zeromq-2.1.7/src/ypipe.hpp +209 -0
- data/libzmq/zeromq-2.1.7/src/yqueue.hpp +198 -0
- data/libzmq/zeromq-2.1.7/src/zmq.cpp +798 -0
- data/libzmq/zeromq-2.1.7/src/zmq_connecter.cpp +166 -0
- data/libzmq/zeromq-2.1.7/src/zmq_connecter.hpp +92 -0
- data/libzmq/zeromq-2.1.7/src/zmq_engine.cpp +220 -0
- data/libzmq/zeromq-2.1.7/src/zmq_engine.hpp +87 -0
- data/libzmq/zeromq-2.1.7/src/zmq_init.cpp +216 -0
- data/libzmq/zeromq-2.1.7/src/zmq_init.hpp +93 -0
- data/libzmq/zeromq-2.1.7/src/zmq_listener.cpp +78 -0
- data/libzmq/zeromq-2.1.7/src/zmq_listener.hpp +67 -0
- data/libzmq/zeromq-2.1.7/tests/Makefile.am +30 -0
- data/libzmq/zeromq-2.1.7/tests/Makefile.in +713 -0
- data/libzmq/zeromq-2.1.7/tests/test_hwm.cpp +68 -0
- data/libzmq/zeromq-2.1.7/tests/test_pair_inproc.cpp +31 -0
- data/libzmq/zeromq-2.1.7/tests/test_pair_ipc.cpp +31 -0
- data/libzmq/zeromq-2.1.7/tests/test_pair_tcp.cpp +31 -0
- data/libzmq/zeromq-2.1.7/tests/test_reqrep_inproc.cpp +31 -0
- data/libzmq/zeromq-2.1.7/tests/test_reqrep_ipc.cpp +31 -0
- data/libzmq/zeromq-2.1.7/tests/test_reqrep_tcp.cpp +31 -0
- data/libzmq/zeromq-2.1.7/tests/test_shutdown_stress.cpp +87 -0
- data/libzmq/zeromq-2.1.7/tests/testutil.hpp +130 -0
- data/libzmq/zeromq-2.1.7/version.sh +21 -0
- data/libzmq/zeromq-2.1.7/zeromq.spec +139 -0
- metadata +348 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
zmq_recv(3)
|
2
|
+
===========
|
3
|
+
|
4
|
+
|
5
|
+
NAME
|
6
|
+
----
|
7
|
+
zmq_recv - receive a message from a socket
|
8
|
+
|
9
|
+
|
10
|
+
SYNOPSIS
|
11
|
+
--------
|
12
|
+
*int zmq_recv (void '*socket', zmq_msg_t '*msg', int 'flags');*
|
13
|
+
|
14
|
+
|
15
|
+
DESCRIPTION
|
16
|
+
-----------
|
17
|
+
The _zmq_recv()_ function shall receive a message from the socket referenced by
|
18
|
+
the 'socket' argument and store it in the message referenced by the 'msg'
|
19
|
+
argument. Any content previously stored in 'msg' shall be properly deallocated.
|
20
|
+
If there are no messages available on the specified 'socket' the _zmq_recv()_
|
21
|
+
function shall block until the request can be satisfied. The 'flags' argument
|
22
|
+
is a combination of the flags defined below:
|
23
|
+
|
24
|
+
*ZMQ_NOBLOCK*::
|
25
|
+
Specifies that the operation should be performed in non-blocking mode. If there
|
26
|
+
are no messages available on the specified 'socket', the _zmq_recv()_ function
|
27
|
+
shall fail with 'errno' set to EAGAIN.
|
28
|
+
|
29
|
+
|
30
|
+
Multi-part messages
|
31
|
+
~~~~~~~~~~~~~~~~~~~
|
32
|
+
A 0MQ message is composed of 1 or more message parts; each message part is an
|
33
|
+
independent 'zmq_msg_t' in its own right. 0MQ ensures atomic delivery of
|
34
|
+
messages; peers shall receive either all _message parts_ of a message or none
|
35
|
+
at all.
|
36
|
+
|
37
|
+
The total number of message parts is unlimited.
|
38
|
+
|
39
|
+
An application wishing to determine if a message is composed of multiple parts
|
40
|
+
does so by retrieving the value of the _ZMQ_RCVMORE_ socket option on the
|
41
|
+
'socket' it is receiving the message from. If there are no message parts to
|
42
|
+
follow, or if the message is not composed of multiple parts, _ZMQ_RCVMORE_
|
43
|
+
shall report a value of zero. Otherwise, _ZMQ_RCVMORE_ shall report a value of
|
44
|
+
1, indicating that more message parts are to follow.
|
45
|
+
|
46
|
+
|
47
|
+
RETURN VALUE
|
48
|
+
------------
|
49
|
+
The _zmq_recv()_ function shall return zero if successful. Otherwise it shall
|
50
|
+
return `-1` and set 'errno' to one of the values defined below.
|
51
|
+
|
52
|
+
|
53
|
+
ERRORS
|
54
|
+
------
|
55
|
+
*EAGAIN*::
|
56
|
+
Non-blocking mode was requested and no messages are available at the moment.
|
57
|
+
*ENOTSUP*::
|
58
|
+
The _zmq_recv()_ operation is not supported by this socket type.
|
59
|
+
*EFSM*::
|
60
|
+
The _zmq_recv()_ operation cannot be performed on this socket at the moment due
|
61
|
+
to the socket not being in the appropriate state. This error may occur with
|
62
|
+
socket types that switch between several states, such as ZMQ_REP. See the
|
63
|
+
_messaging patterns_ section of linkzmq:zmq_socket[3] for more information.
|
64
|
+
*ETERM*::
|
65
|
+
The 0MQ 'context' associated with the specified 'socket' was terminated.
|
66
|
+
*ENOTSOCK*::
|
67
|
+
The provided 'socket' was invalid.
|
68
|
+
*EINTR*::
|
69
|
+
The operation was interrupted by delivery of a signal before a message was
|
70
|
+
available.
|
71
|
+
*EFAULT*::
|
72
|
+
The message passed to the function was invalid.
|
73
|
+
|
74
|
+
|
75
|
+
EXAMPLE
|
76
|
+
-------
|
77
|
+
.Receiving a message from a socket
|
78
|
+
----
|
79
|
+
/* Create an empty 0MQ message */
|
80
|
+
zmq_msg_t msg;
|
81
|
+
int rc = zmq_msg_init (&msg);
|
82
|
+
assert (rc == 0);
|
83
|
+
/* Block until a message is available to be received from socket */
|
84
|
+
rc = zmq_recv (socket, &msg, 0);
|
85
|
+
assert (rc == 0);
|
86
|
+
/* Release message */
|
87
|
+
zmq_msg_close (&msg);
|
88
|
+
----
|
89
|
+
|
90
|
+
.Receiving a multi-part message
|
91
|
+
----
|
92
|
+
int64_t more;
|
93
|
+
size_t more_size = sizeof more;
|
94
|
+
do {
|
95
|
+
/* Create an empty 0MQ message to hold the message part */
|
96
|
+
zmq_msg_t part;
|
97
|
+
int rc = zmq_msg_init (&part);
|
98
|
+
assert (rc == 0);
|
99
|
+
/* Block until a message is available to be received from socket */
|
100
|
+
rc = zmq_recv (socket, &part, 0);
|
101
|
+
assert (rc == 0);
|
102
|
+
/* Determine if more message parts are to follow */
|
103
|
+
rc = zmq_getsockopt (socket, ZMQ_RCVMORE, &more, &more_size);
|
104
|
+
assert (rc == 0);
|
105
|
+
zmq_msg_close (&part);
|
106
|
+
} while (more);
|
107
|
+
----
|
108
|
+
|
109
|
+
|
110
|
+
SEE ALSO
|
111
|
+
--------
|
112
|
+
linkzmq:zmq_send[3]
|
113
|
+
linkzmq:zmq_getsockopt[3]
|
114
|
+
linkzmq:zmq_socket[7]
|
115
|
+
linkzmq:zmq[7]
|
116
|
+
|
117
|
+
|
118
|
+
AUTHORS
|
119
|
+
-------
|
120
|
+
This 0MQ manual page was written by Martin Sustrik <sustrik@250bpm.com> and
|
121
|
+
Martin Lucina <mato@kotelna.sk>.
|
@@ -0,0 +1,185 @@
|
|
1
|
+
'\" t
|
2
|
+
.\" Title: zmq_send
|
3
|
+
.\" Author: [see the "AUTHORS" section]
|
4
|
+
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
|
5
|
+
.\" Date: 05/07/2011
|
6
|
+
.\" Manual: 0MQ Manual
|
7
|
+
.\" Source: 0MQ 2.1.6
|
8
|
+
.\" Language: English
|
9
|
+
.\"
|
10
|
+
.TH "ZMQ_SEND" "3" "05/07/2011" "0MQ 2\&.1\&.6" "0MQ Manual"
|
11
|
+
.\" -----------------------------------------------------------------
|
12
|
+
.\" * Define some portability stuff
|
13
|
+
.\" -----------------------------------------------------------------
|
14
|
+
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
15
|
+
.\" http://bugs.debian.org/507673
|
16
|
+
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
|
17
|
+
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
18
|
+
.ie \n(.g .ds Aq \(aq
|
19
|
+
.el .ds Aq '
|
20
|
+
.\" -----------------------------------------------------------------
|
21
|
+
.\" * set default formatting
|
22
|
+
.\" -----------------------------------------------------------------
|
23
|
+
.\" disable hyphenation
|
24
|
+
.nh
|
25
|
+
.\" disable justification (adjust text to left margin only)
|
26
|
+
.ad l
|
27
|
+
.\" -----------------------------------------------------------------
|
28
|
+
.\" * MAIN CONTENT STARTS HERE *
|
29
|
+
.\" -----------------------------------------------------------------
|
30
|
+
.SH "NAME"
|
31
|
+
zmq_send \- send a message on a socket
|
32
|
+
.SH "SYNOPSIS"
|
33
|
+
.sp
|
34
|
+
\fBint zmq_send (void \fR\fB\fI*socket\fR\fR\fB, zmq_msg_t \fR\fB\fI*msg\fR\fR\fB, int \fR\fB\fIflags\fR\fR\fB);\fR
|
35
|
+
.SH "DESCRIPTION"
|
36
|
+
.sp
|
37
|
+
The \fIzmq_send()\fR function shall queue the message referenced by the \fImsg\fR argument to be sent to the socket referenced by the \fIsocket\fR argument\&. The \fIflags\fR argument is a combination of the flags defined below:
|
38
|
+
.PP
|
39
|
+
\fBZMQ_NOBLOCK\fR
|
40
|
+
.RS 4
|
41
|
+
Specifies that the operation should be performed in non\-blocking mode\&. If the message cannot be queued on the
|
42
|
+
\fIsocket\fR, the
|
43
|
+
\fIzmq_send()\fR
|
44
|
+
function shall fail with
|
45
|
+
\fIerrno\fR
|
46
|
+
set to EAGAIN\&.
|
47
|
+
.RE
|
48
|
+
.PP
|
49
|
+
\fBZMQ_SNDMORE\fR
|
50
|
+
.RS 4
|
51
|
+
Specifies that the message being sent is a multi\-part message, and that further message parts are to follow\&. Refer to the section regarding multi\-part messages below for a detailed description\&.
|
52
|
+
.RE
|
53
|
+
.sp
|
54
|
+
The \fIzmq_msg_t\fR structure passed to \fIzmq_send()\fR is nullified during the call\&. If you want to send the same message to multiple sockets you have to copy it using (e\&.g\&. using \fIzmq_msg_copy()\fR)\&.
|
55
|
+
.if n \{\
|
56
|
+
.sp
|
57
|
+
.\}
|
58
|
+
.RS 4
|
59
|
+
.it 1 an-trap
|
60
|
+
.nr an-no-space-flag 1
|
61
|
+
.nr an-break-flag 1
|
62
|
+
.br
|
63
|
+
.ps +1
|
64
|
+
\fBNote\fR
|
65
|
+
.ps -1
|
66
|
+
.br
|
67
|
+
.sp
|
68
|
+
A successful invocation of \fIzmq_send()\fR does not indicate that the message has been transmitted to the network, only that it has been queued on the \fIsocket\fR and 0MQ has assumed responsibility for the message\&.
|
69
|
+
.sp .5v
|
70
|
+
.RE
|
71
|
+
.SS "Multi\-part messages"
|
72
|
+
.sp
|
73
|
+
A 0MQ message is composed of 1 or more message parts; each message part is an independent \fIzmq_msg_t\fR in its own right\&. 0MQ ensures atomic delivery of messages; peers shall receive either all \fImessage parts\fR of a message or none at all\&.
|
74
|
+
.sp
|
75
|
+
The total number of message parts is unlimited\&.
|
76
|
+
.sp
|
77
|
+
An application wishing to send a multi\-part message does so by specifying the \fIZMQ_SNDMORE\fR flag to \fIzmq_send()\fR\&. The presence of this flag indicates to 0MQ that the message being sent is a multi\-part message and that more message parts are to follow\&. When the application wishes to send the final message part it does so by calling \fIzmq_send()\fR without the \fIZMQ_SNDMORE\fR flag; this indicates that no more message parts are to follow\&.
|
78
|
+
.SH "RETURN VALUE"
|
79
|
+
.sp
|
80
|
+
The \fIzmq_send()\fR function shall return zero if successful\&. Otherwise it shall return \-1 and set \fIerrno\fR to one of the values defined below\&.
|
81
|
+
.SH "ERRORS"
|
82
|
+
.PP
|
83
|
+
\fBEAGAIN\fR
|
84
|
+
.RS 4
|
85
|
+
Non\-blocking mode was requested and the message cannot be sent at the moment\&.
|
86
|
+
.RE
|
87
|
+
.PP
|
88
|
+
\fBENOTSUP\fR
|
89
|
+
.RS 4
|
90
|
+
The
|
91
|
+
\fIzmq_send()\fR
|
92
|
+
operation is not supported by this socket type\&.
|
93
|
+
.RE
|
94
|
+
.PP
|
95
|
+
\fBEFSM\fR
|
96
|
+
.RS 4
|
97
|
+
The
|
98
|
+
\fIzmq_send()\fR
|
99
|
+
operation cannot be performed on this socket at the moment due to the socket not being in the appropriate state\&. This error may occur with socket types that switch between several states, such as ZMQ_REP\&. See the
|
100
|
+
\fImessaging patterns\fR
|
101
|
+
section of
|
102
|
+
\fBzmq_socket\fR(3)
|
103
|
+
for more information\&.
|
104
|
+
.RE
|
105
|
+
.PP
|
106
|
+
\fBETERM\fR
|
107
|
+
.RS 4
|
108
|
+
The 0MQ
|
109
|
+
\fIcontext\fR
|
110
|
+
associated with the specified
|
111
|
+
\fIsocket\fR
|
112
|
+
was terminated\&.
|
113
|
+
.RE
|
114
|
+
.PP
|
115
|
+
\fBENOTSOCK\fR
|
116
|
+
.RS 4
|
117
|
+
The provided
|
118
|
+
\fIsocket\fR
|
119
|
+
was invalid\&.
|
120
|
+
.RE
|
121
|
+
.PP
|
122
|
+
\fBEINTR\fR
|
123
|
+
.RS 4
|
124
|
+
The operation was interrupted by delivery of a signal before the message was sent\&.
|
125
|
+
.RE
|
126
|
+
.PP
|
127
|
+
\fBEFAULT\fR
|
128
|
+
.RS 4
|
129
|
+
Invalid message\&.
|
130
|
+
.RE
|
131
|
+
.SH "EXAMPLE"
|
132
|
+
.PP
|
133
|
+
\fBFilling in a message and sending it to a socket\fR.
|
134
|
+
.sp
|
135
|
+
.if n \{\
|
136
|
+
.RS 4
|
137
|
+
.\}
|
138
|
+
.nf
|
139
|
+
/* Create a new message, allocating 6 bytes for message content */
|
140
|
+
zmq_msg_t msg;
|
141
|
+
int rc = zmq_msg_init_size (&msg, 6);
|
142
|
+
assert (rc == 0);
|
143
|
+
/* Fill in message content with \*(AqAAAAAA\*(Aq */
|
144
|
+
memset (zmq_msg_data (&msg), \*(AqA\*(Aq, 6);
|
145
|
+
/* Send the message to the socket */
|
146
|
+
rc = zmq_send (socket, &msg, 0);
|
147
|
+
assert (rc == 0);
|
148
|
+
.fi
|
149
|
+
.if n \{\
|
150
|
+
.RE
|
151
|
+
.\}
|
152
|
+
.PP
|
153
|
+
\fBSending a multi-part message\fR.
|
154
|
+
.sp
|
155
|
+
.if n \{\
|
156
|
+
.RS 4
|
157
|
+
.\}
|
158
|
+
.nf
|
159
|
+
/* Send a multi\-part message consisting of three parts to socket */
|
160
|
+
rc = zmq_send (socket, &part1, ZMQ_SNDMORE);
|
161
|
+
rc = zmq_send (socket, &part2, ZMQ_SNDMORE);
|
162
|
+
/* Final part; no more parts to follow */
|
163
|
+
rc = zmq_send (socket, &part3, 0);
|
164
|
+
.fi
|
165
|
+
.if n \{\
|
166
|
+
.RE
|
167
|
+
.\}
|
168
|
+
.sp
|
169
|
+
.SH "SEE ALSO"
|
170
|
+
.sp
|
171
|
+
\fBzmq_recv\fR(3) \fBzmq_socket\fR(7) \fBzmq\fR(7)
|
172
|
+
.SH "AUTHORS"
|
173
|
+
.sp
|
174
|
+
This 0MQ manual page was written by Martin Sustrik <\m[blue]\fBsustrik@250bpm\&.com\fR\m[]\&\s-2\u[1]\d\s+2> and Martin Lucina <\m[blue]\fBmato@kotelna\&.sk\fR\m[]\&\s-2\u[2]\d\s+2>\&.
|
175
|
+
.SH "NOTES"
|
176
|
+
.IP " 1." 4
|
177
|
+
sustrik@250bpm.com
|
178
|
+
.RS 4
|
179
|
+
\%mailto:sustrik@250bpm.com
|
180
|
+
.RE
|
181
|
+
.IP " 2." 4
|
182
|
+
mato@kotelna.sk
|
183
|
+
.RS 4
|
184
|
+
\%mailto:mato@kotelna.sk
|
185
|
+
.RE
|
@@ -0,0 +1,755 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
6
|
+
<meta name="generator" content="AsciiDoc 8.5.2" />
|
7
|
+
<title>zmq_send(3)</title>
|
8
|
+
<style type="text/css">
|
9
|
+
/* Debug borders */
|
10
|
+
p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
|
11
|
+
/*
|
12
|
+
border: 1px solid red;
|
13
|
+
*/
|
14
|
+
}
|
15
|
+
|
16
|
+
body {
|
17
|
+
margin: 1em 5% 1em 5%;
|
18
|
+
}
|
19
|
+
|
20
|
+
a {
|
21
|
+
color: blue;
|
22
|
+
text-decoration: underline;
|
23
|
+
}
|
24
|
+
a:visited {
|
25
|
+
color: fuchsia;
|
26
|
+
}
|
27
|
+
|
28
|
+
em {
|
29
|
+
font-style: italic;
|
30
|
+
color: navy;
|
31
|
+
}
|
32
|
+
|
33
|
+
strong {
|
34
|
+
font-weight: bold;
|
35
|
+
color: #083194;
|
36
|
+
}
|
37
|
+
|
38
|
+
tt {
|
39
|
+
color: navy;
|
40
|
+
}
|
41
|
+
|
42
|
+
h1, h2, h3, h4, h5, h6 {
|
43
|
+
color: #527bbd;
|
44
|
+
font-family: sans-serif;
|
45
|
+
margin-top: 1.2em;
|
46
|
+
margin-bottom: 0.5em;
|
47
|
+
line-height: 1.3;
|
48
|
+
}
|
49
|
+
|
50
|
+
h1, h2, h3 {
|
51
|
+
border-bottom: 2px solid silver;
|
52
|
+
}
|
53
|
+
h2 {
|
54
|
+
padding-top: 0.5em;
|
55
|
+
}
|
56
|
+
h3 {
|
57
|
+
float: left;
|
58
|
+
}
|
59
|
+
h3 + * {
|
60
|
+
clear: left;
|
61
|
+
}
|
62
|
+
|
63
|
+
div.sectionbody {
|
64
|
+
font-family: serif;
|
65
|
+
margin-left: 0;
|
66
|
+
}
|
67
|
+
|
68
|
+
hr {
|
69
|
+
border: 1px solid silver;
|
70
|
+
}
|
71
|
+
|
72
|
+
p {
|
73
|
+
margin-top: 0.5em;
|
74
|
+
margin-bottom: 0.5em;
|
75
|
+
}
|
76
|
+
|
77
|
+
ul, ol, li > p {
|
78
|
+
margin-top: 0;
|
79
|
+
}
|
80
|
+
|
81
|
+
pre {
|
82
|
+
padding: 0;
|
83
|
+
margin: 0;
|
84
|
+
}
|
85
|
+
|
86
|
+
span#author {
|
87
|
+
color: #527bbd;
|
88
|
+
font-family: sans-serif;
|
89
|
+
font-weight: bold;
|
90
|
+
font-size: 1.1em;
|
91
|
+
}
|
92
|
+
span#email {
|
93
|
+
}
|
94
|
+
span#revnumber, span#revdate, span#revremark {
|
95
|
+
font-family: sans-serif;
|
96
|
+
}
|
97
|
+
|
98
|
+
div#footer {
|
99
|
+
font-family: sans-serif;
|
100
|
+
font-size: small;
|
101
|
+
border-top: 2px solid silver;
|
102
|
+
padding-top: 0.5em;
|
103
|
+
margin-top: 4.0em;
|
104
|
+
}
|
105
|
+
div#footer-text {
|
106
|
+
float: left;
|
107
|
+
padding-bottom: 0.5em;
|
108
|
+
}
|
109
|
+
div#footer-badges {
|
110
|
+
float: right;
|
111
|
+
padding-bottom: 0.5em;
|
112
|
+
}
|
113
|
+
|
114
|
+
div#preamble {
|
115
|
+
margin-top: 1.5em;
|
116
|
+
margin-bottom: 1.5em;
|
117
|
+
}
|
118
|
+
div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
|
119
|
+
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
|
120
|
+
div.admonitionblock {
|
121
|
+
margin-top: 1.0em;
|
122
|
+
margin-bottom: 1.5em;
|
123
|
+
}
|
124
|
+
div.admonitionblock {
|
125
|
+
margin-top: 2.0em;
|
126
|
+
margin-bottom: 2.0em;
|
127
|
+
margin-right: 10%;
|
128
|
+
color: #606060;
|
129
|
+
}
|
130
|
+
|
131
|
+
div.content { /* Block element content. */
|
132
|
+
padding: 0;
|
133
|
+
}
|
134
|
+
|
135
|
+
/* Block element titles. */
|
136
|
+
div.title, caption.title {
|
137
|
+
color: #527bbd;
|
138
|
+
font-family: sans-serif;
|
139
|
+
font-weight: bold;
|
140
|
+
text-align: left;
|
141
|
+
margin-top: 1.0em;
|
142
|
+
margin-bottom: 0.5em;
|
143
|
+
}
|
144
|
+
div.title + * {
|
145
|
+
margin-top: 0;
|
146
|
+
}
|
147
|
+
|
148
|
+
td div.title:first-child {
|
149
|
+
margin-top: 0.0em;
|
150
|
+
}
|
151
|
+
div.content div.title:first-child {
|
152
|
+
margin-top: 0.0em;
|
153
|
+
}
|
154
|
+
div.content + div.title {
|
155
|
+
margin-top: 0.0em;
|
156
|
+
}
|
157
|
+
|
158
|
+
div.sidebarblock > div.content {
|
159
|
+
background: #ffffee;
|
160
|
+
border: 1px solid silver;
|
161
|
+
padding: 0.5em;
|
162
|
+
}
|
163
|
+
|
164
|
+
div.listingblock > div.content {
|
165
|
+
border: 1px solid silver;
|
166
|
+
background: #f4f4f4;
|
167
|
+
padding: 0.5em;
|
168
|
+
}
|
169
|
+
|
170
|
+
div.quoteblock, div.verseblock {
|
171
|
+
padding-left: 1.0em;
|
172
|
+
margin-left: 1.0em;
|
173
|
+
margin-right: 10%;
|
174
|
+
border-left: 5px solid #dddddd;
|
175
|
+
color: #777777;
|
176
|
+
}
|
177
|
+
|
178
|
+
div.quoteblock > div.attribution {
|
179
|
+
padding-top: 0.5em;
|
180
|
+
text-align: right;
|
181
|
+
}
|
182
|
+
|
183
|
+
div.verseblock > div.content {
|
184
|
+
white-space: pre;
|
185
|
+
}
|
186
|
+
div.verseblock > div.attribution {
|
187
|
+
padding-top: 0.75em;
|
188
|
+
text-align: left;
|
189
|
+
}
|
190
|
+
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
|
191
|
+
div.verseblock + div.attribution {
|
192
|
+
text-align: left;
|
193
|
+
}
|
194
|
+
|
195
|
+
div.admonitionblock .icon {
|
196
|
+
vertical-align: top;
|
197
|
+
font-size: 1.1em;
|
198
|
+
font-weight: bold;
|
199
|
+
text-decoration: underline;
|
200
|
+
color: #527bbd;
|
201
|
+
padding-right: 0.5em;
|
202
|
+
}
|
203
|
+
div.admonitionblock td.content {
|
204
|
+
padding-left: 0.5em;
|
205
|
+
border-left: 3px solid #dddddd;
|
206
|
+
}
|
207
|
+
|
208
|
+
div.exampleblock > div.content {
|
209
|
+
border-left: 3px solid #dddddd;
|
210
|
+
padding-left: 0.5em;
|
211
|
+
}
|
212
|
+
|
213
|
+
div.imageblock div.content { padding-left: 0; }
|
214
|
+
span.image img { border-style: none; }
|
215
|
+
a.image:visited { color: white; }
|
216
|
+
|
217
|
+
dl {
|
218
|
+
margin-top: 0.8em;
|
219
|
+
margin-bottom: 0.8em;
|
220
|
+
}
|
221
|
+
dt {
|
222
|
+
margin-top: 0.5em;
|
223
|
+
margin-bottom: 0;
|
224
|
+
font-style: normal;
|
225
|
+
color: navy;
|
226
|
+
}
|
227
|
+
dd > *:first-child {
|
228
|
+
margin-top: 0.1em;
|
229
|
+
}
|
230
|
+
|
231
|
+
ul, ol {
|
232
|
+
list-style-position: outside;
|
233
|
+
}
|
234
|
+
ol.arabic {
|
235
|
+
list-style-type: decimal;
|
236
|
+
}
|
237
|
+
ol.loweralpha {
|
238
|
+
list-style-type: lower-alpha;
|
239
|
+
}
|
240
|
+
ol.upperalpha {
|
241
|
+
list-style-type: upper-alpha;
|
242
|
+
}
|
243
|
+
ol.lowerroman {
|
244
|
+
list-style-type: lower-roman;
|
245
|
+
}
|
246
|
+
ol.upperroman {
|
247
|
+
list-style-type: upper-roman;
|
248
|
+
}
|
249
|
+
|
250
|
+
div.compact ul, div.compact ol,
|
251
|
+
div.compact p, div.compact p,
|
252
|
+
div.compact div, div.compact div {
|
253
|
+
margin-top: 0.1em;
|
254
|
+
margin-bottom: 0.1em;
|
255
|
+
}
|
256
|
+
|
257
|
+
div.tableblock > table {
|
258
|
+
border: 3px solid #527bbd;
|
259
|
+
}
|
260
|
+
thead, p.table.header {
|
261
|
+
font-family: sans-serif;
|
262
|
+
font-weight: bold;
|
263
|
+
}
|
264
|
+
tfoot {
|
265
|
+
font-weight: bold;
|
266
|
+
}
|
267
|
+
td > div.verse {
|
268
|
+
white-space: pre;
|
269
|
+
}
|
270
|
+
p.table {
|
271
|
+
margin-top: 0;
|
272
|
+
}
|
273
|
+
/* Because the table frame attribute is overriden by CSS in most browsers. */
|
274
|
+
div.tableblock > table[frame="void"] {
|
275
|
+
border-style: none;
|
276
|
+
}
|
277
|
+
div.tableblock > table[frame="hsides"] {
|
278
|
+
border-left-style: none;
|
279
|
+
border-right-style: none;
|
280
|
+
}
|
281
|
+
div.tableblock > table[frame="vsides"] {
|
282
|
+
border-top-style: none;
|
283
|
+
border-bottom-style: none;
|
284
|
+
}
|
285
|
+
|
286
|
+
|
287
|
+
div.hdlist {
|
288
|
+
margin-top: 0.8em;
|
289
|
+
margin-bottom: 0.8em;
|
290
|
+
}
|
291
|
+
div.hdlist tr {
|
292
|
+
padding-bottom: 15px;
|
293
|
+
}
|
294
|
+
dt.hdlist1.strong, td.hdlist1.strong {
|
295
|
+
font-weight: bold;
|
296
|
+
}
|
297
|
+
td.hdlist1 {
|
298
|
+
vertical-align: top;
|
299
|
+
font-style: normal;
|
300
|
+
padding-right: 0.8em;
|
301
|
+
color: navy;
|
302
|
+
}
|
303
|
+
td.hdlist2 {
|
304
|
+
vertical-align: top;
|
305
|
+
}
|
306
|
+
div.hdlist.compact tr {
|
307
|
+
margin: 0;
|
308
|
+
padding-bottom: 0;
|
309
|
+
}
|
310
|
+
|
311
|
+
.comment {
|
312
|
+
background: yellow;
|
313
|
+
}
|
314
|
+
|
315
|
+
.footnote, .footnoteref {
|
316
|
+
font-size: 0.8em;
|
317
|
+
}
|
318
|
+
|
319
|
+
span.footnote, span.footnoteref {
|
320
|
+
vertical-align: super;
|
321
|
+
}
|
322
|
+
|
323
|
+
#footnotes {
|
324
|
+
margin: 20px 0 20px 0;
|
325
|
+
padding: 7px 0 0 0;
|
326
|
+
}
|
327
|
+
|
328
|
+
#footnotes div.footnote {
|
329
|
+
margin: 0 0 5px 0;
|
330
|
+
}
|
331
|
+
|
332
|
+
#footnotes hr {
|
333
|
+
border: none;
|
334
|
+
border-top: 1px solid silver;
|
335
|
+
height: 1px;
|
336
|
+
text-align: left;
|
337
|
+
margin-left: 0;
|
338
|
+
width: 20%;
|
339
|
+
min-width: 100px;
|
340
|
+
}
|
341
|
+
|
342
|
+
|
343
|
+
@media print {
|
344
|
+
div#footer-badges { display: none; }
|
345
|
+
}
|
346
|
+
|
347
|
+
div#toc {
|
348
|
+
margin-bottom: 2.5em;
|
349
|
+
}
|
350
|
+
|
351
|
+
div#toctitle {
|
352
|
+
color: #527bbd;
|
353
|
+
font-family: sans-serif;
|
354
|
+
font-size: 1.1em;
|
355
|
+
font-weight: bold;
|
356
|
+
margin-top: 1.0em;
|
357
|
+
margin-bottom: 0.1em;
|
358
|
+
}
|
359
|
+
|
360
|
+
div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
|
361
|
+
margin-top: 0;
|
362
|
+
margin-bottom: 0;
|
363
|
+
}
|
364
|
+
div.toclevel2 {
|
365
|
+
margin-left: 2em;
|
366
|
+
font-size: 0.9em;
|
367
|
+
}
|
368
|
+
div.toclevel3 {
|
369
|
+
margin-left: 4em;
|
370
|
+
font-size: 0.9em;
|
371
|
+
}
|
372
|
+
div.toclevel4 {
|
373
|
+
margin-left: 6em;
|
374
|
+
font-size: 0.9em;
|
375
|
+
}
|
376
|
+
/* Overrides for manpage documents */
|
377
|
+
h1 {
|
378
|
+
padding-top: 0.5em;
|
379
|
+
padding-bottom: 0.5em;
|
380
|
+
border-top: 2px solid silver;
|
381
|
+
border-bottom: 2px solid silver;
|
382
|
+
}
|
383
|
+
h2 {
|
384
|
+
border-style: none;
|
385
|
+
}
|
386
|
+
div.sectionbody {
|
387
|
+
margin-left: 5%;
|
388
|
+
}
|
389
|
+
|
390
|
+
@media print {
|
391
|
+
div#toc { display: none; }
|
392
|
+
}
|
393
|
+
|
394
|
+
/* Workarounds for IE6's broken and incomplete CSS2. */
|
395
|
+
|
396
|
+
div.sidebar-content {
|
397
|
+
background: #ffffee;
|
398
|
+
border: 1px solid silver;
|
399
|
+
padding: 0.5em;
|
400
|
+
}
|
401
|
+
div.sidebar-title, div.image-title {
|
402
|
+
color: #527bbd;
|
403
|
+
font-family: sans-serif;
|
404
|
+
font-weight: bold;
|
405
|
+
margin-top: 0.0em;
|
406
|
+
margin-bottom: 0.5em;
|
407
|
+
}
|
408
|
+
|
409
|
+
div.listingblock div.content {
|
410
|
+
border: 1px solid silver;
|
411
|
+
background: #f4f4f4;
|
412
|
+
padding: 0.5em;
|
413
|
+
}
|
414
|
+
|
415
|
+
div.quoteblock-attribution {
|
416
|
+
padding-top: 0.5em;
|
417
|
+
text-align: right;
|
418
|
+
}
|
419
|
+
|
420
|
+
div.verseblock-content {
|
421
|
+
white-space: pre;
|
422
|
+
}
|
423
|
+
div.verseblock-attribution {
|
424
|
+
padding-top: 0.75em;
|
425
|
+
text-align: left;
|
426
|
+
}
|
427
|
+
|
428
|
+
div.exampleblock-content {
|
429
|
+
border-left: 3px solid #dddddd;
|
430
|
+
padding-left: 0.5em;
|
431
|
+
}
|
432
|
+
|
433
|
+
/* IE6 sets dynamically generated links as visited. */
|
434
|
+
div#toc a:visited { color: blue; }
|
435
|
+
</style>
|
436
|
+
<script type="text/javascript">
|
437
|
+
/*<+'])');
|
481
|
+
// Function that scans the DOM tree for header elements (the DOM2
|
482
|
+
// nodeIterator API would be a better technique but not supported by all
|
483
|
+
// browsers).
|
484
|
+
var iterate = function (el) {
|
485
|
+
for (var i = el.firstChild; i != null; i = i.nextSibling) {
|
486
|
+
if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
|
487
|
+
var mo = re.exec(i.tagName);
|
488
|
+
if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
|
489
|
+
result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
|
490
|
+
}
|
491
|
+
iterate(i);
|
492
|
+
}
|
493
|
+
}
|
494
|
+
}
|
495
|
+
iterate(el);
|
496
|
+
return result;
|
497
|
+
}
|
498
|
+
|
499
|
+
var toc = document.getElementById("toc");
|
500
|
+
var entries = tocEntries(document.getElementById("content"), toclevels);
|
501
|
+
for (var i = 0; i < entries.length; ++i) {
|
502
|
+
var entry = entries[i];
|
503
|
+
if (entry.element.id == "")
|
504
|
+
entry.element.id = "_toc_" + i;
|
505
|
+
var a = document.createElement("a");
|
506
|
+
a.href = "#" + entry.element.id;
|
507
|
+
a.appendChild(document.createTextNode(entry.text));
|
508
|
+
var div = document.createElement("div");
|
509
|
+
div.appendChild(a);
|
510
|
+
div.className = "toclevel" + entry.toclevel;
|
511
|
+
toc.appendChild(div);
|
512
|
+
}
|
513
|
+
if (entries.length == 0)
|
514
|
+
toc.parentNode.removeChild(toc);
|
515
|
+
},
|
516
|
+
|
517
|
+
|
518
|
+
/////////////////////////////////////////////////////////////////////
|
519
|
+
// Footnotes generator
|
520
|
+
/////////////////////////////////////////////////////////////////////
|
521
|
+
|
522
|
+
/* Based on footnote generation code from:
|
523
|
+
* http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
|
524
|
+
*/
|
525
|
+
|
526
|
+
footnotes: function () {
|
527
|
+
var cont = document.getElementById("content");
|
528
|
+
var noteholder = document.getElementById("footnotes");
|
529
|
+
var spans = cont.getElementsByTagName("span");
|
530
|
+
var refs = {};
|
531
|
+
var n = 0;
|
532
|
+
for (i=0; i<spans.length; i++) {
|
533
|
+
if (spans[i].className == "footnote") {
|
534
|
+
n++;
|
535
|
+
// Use [\s\S] in place of . so multi-line matches work.
|
536
|
+
// Because JavaScript has no s (dotall) regex flag.
|
537
|
+
note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
|
538
|
+
noteholder.innerHTML +=
|
539
|
+
"<div class='footnote' id='_footnote_" + n + "'>" +
|
540
|
+
"<a href='#_footnoteref_" + n + "' title='Return to text'>" +
|
541
|
+
n + "</a>. " + note + "</div>";
|
542
|
+
spans[i].innerHTML =
|
543
|
+
"[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
|
544
|
+
"' title='View footnote' class='footnote'>" + n + "</a>]";
|
545
|
+
var id =spans[i].getAttribute("id");
|
546
|
+
if (id != null) refs["#"+id] = n;
|
547
|
+
}
|
548
|
+
}
|
549
|
+
if (n == 0)
|
550
|
+
noteholder.parentNode.removeChild(noteholder);
|
551
|
+
else {
|
552
|
+
// Process footnoterefs.
|
553
|
+
for (i=0; i<spans.length; i++) {
|
554
|
+
if (spans[i].className == "footnoteref") {
|
555
|
+
var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
|
556
|
+
href = href.match(/#.*/)[0]; // Because IE return full URL.
|
557
|
+
n = refs[href];
|
558
|
+
spans[i].innerHTML =
|
559
|
+
"[<a href='#_footnote_" + n +
|
560
|
+
"' title='View footnote' class='footnote'>" + n + "</a>]";
|
561
|
+
}
|
562
|
+
}
|
563
|
+
}
|
564
|
+
}
|
565
|
+
|
566
|
+
}
|
567
|
+
/*]]>*/
|
568
|
+
</script>
|
569
|
+
</head>
|
570
|
+
<body>
|
571
|
+
<div id="header">
|
572
|
+
<h1>
|
573
|
+
zmq_send(3) Manual Page
|
574
|
+
</h1>
|
575
|
+
<h2>NAME</h2>
|
576
|
+
<div class="sectionbody">
|
577
|
+
<p>zmq_send -
|
578
|
+
send a message on a socket
|
579
|
+
</p>
|
580
|
+
</div>
|
581
|
+
</div>
|
582
|
+
<div id="content">
|
583
|
+
<h2 id="_synopsis">SYNOPSIS</h2>
|
584
|
+
<div class="sectionbody">
|
585
|
+
<div class="paragraph"><p><strong>int zmq_send (void <em>*socket</em>, zmq_msg_t <em>*msg</em>, int <em>flags</em>);</strong></p></div>
|
586
|
+
</div>
|
587
|
+
<h2 id="_description">DESCRIPTION</h2>
|
588
|
+
<div class="sectionbody">
|
589
|
+
<div class="paragraph"><p>The <em>zmq_send()</em> function shall queue the message referenced by the <em>msg</em>
|
590
|
+
argument to be sent to the socket referenced by the <em>socket</em> argument. The
|
591
|
+
<em>flags</em> argument is a combination of the flags defined below:</p></div>
|
592
|
+
<div class="dlist"><dl>
|
593
|
+
<dt class="hdlist1">
|
594
|
+
<strong>ZMQ_NOBLOCK</strong>
|
595
|
+
</dt>
|
596
|
+
<dd>
|
597
|
+
<p>
|
598
|
+
Specifies that the operation should be performed in non-blocking mode. If the
|
599
|
+
message cannot be queued on the <em>socket</em>, the <em>zmq_send()</em> function shall fail
|
600
|
+
with <em>errno</em> set to EAGAIN.
|
601
|
+
</p>
|
602
|
+
</dd>
|
603
|
+
<dt class="hdlist1">
|
604
|
+
<strong>ZMQ_SNDMORE</strong>
|
605
|
+
</dt>
|
606
|
+
<dd>
|
607
|
+
<p>
|
608
|
+
Specifies that the message being sent is a multi-part message, and that further
|
609
|
+
message parts are to follow. Refer to the section regarding multi-part messages
|
610
|
+
below for a detailed description.
|
611
|
+
</p>
|
612
|
+
</dd>
|
613
|
+
</dl></div>
|
614
|
+
<div class="paragraph"><p>The <em>zmq_msg_t</em> structure passed to <em>zmq_send()</em> is nullified during the call.
|
615
|
+
If you want to send the same message to multiple sockets you have to copy it
|
616
|
+
using (e.g. using <em>zmq_msg_copy()</em>).</p></div>
|
617
|
+
<div class="admonitionblock">
|
618
|
+
<table><tr>
|
619
|
+
<td class="icon">
|
620
|
+
<div class="title">Note</div>
|
621
|
+
</td>
|
622
|
+
<td class="content">A successful invocation of <em>zmq_send()</em> does not indicate that the
|
623
|
+
message has been transmitted to the network, only that it has been queued on
|
624
|
+
the <em>socket</em> and ØMQ has assumed responsibility for the message.</td>
|
625
|
+
</tr></table>
|
626
|
+
</div>
|
627
|
+
<h3 id="_multi_part_messages">Multi-part messages</h3><div style="clear:left"></div>
|
628
|
+
<div class="paragraph"><p>A ØMQ message is composed of 1 or more message parts; each message part is an
|
629
|
+
independent <em>zmq_msg_t</em> in its own right. ØMQ ensures atomic delivery of
|
630
|
+
messages; peers shall receive either all <em>message parts</em> of a message or none
|
631
|
+
at all.</p></div>
|
632
|
+
<div class="paragraph"><p>The total number of message parts is unlimited.</p></div>
|
633
|
+
<div class="paragraph"><p>An application wishing to send a multi-part message does so by specifying the
|
634
|
+
<em>ZMQ_SNDMORE</em> flag to <em>zmq_send()</em>. The presence of this flag indicates to ØMQ
|
635
|
+
that the message being sent is a multi-part message and that more message parts
|
636
|
+
are to follow. When the application wishes to send the final message part it
|
637
|
+
does so by calling <em>zmq_send()</em> without the <em>ZMQ_SNDMORE</em> flag; this indicates
|
638
|
+
that no more message parts are to follow.</p></div>
|
639
|
+
</div>
|
640
|
+
<h2 id="_return_value">RETURN VALUE</h2>
|
641
|
+
<div class="sectionbody">
|
642
|
+
<div class="paragraph"><p>The <em>zmq_send()</em> function shall return zero if successful. Otherwise it shall
|
643
|
+
return <tt>-1</tt> and set <em>errno</em> to one of the values defined below.</p></div>
|
644
|
+
</div>
|
645
|
+
<h2 id="_errors">ERRORS</h2>
|
646
|
+
<div class="sectionbody">
|
647
|
+
<div class="dlist"><dl>
|
648
|
+
<dt class="hdlist1">
|
649
|
+
<strong>EAGAIN</strong>
|
650
|
+
</dt>
|
651
|
+
<dd>
|
652
|
+
<p>
|
653
|
+
Non-blocking mode was requested and the message cannot be sent at the moment.
|
654
|
+
</p>
|
655
|
+
</dd>
|
656
|
+
<dt class="hdlist1">
|
657
|
+
<strong>ENOTSUP</strong>
|
658
|
+
</dt>
|
659
|
+
<dd>
|
660
|
+
<p>
|
661
|
+
The <em>zmq_send()</em> operation is not supported by this socket type.
|
662
|
+
</p>
|
663
|
+
</dd>
|
664
|
+
<dt class="hdlist1">
|
665
|
+
<strong>EFSM</strong>
|
666
|
+
</dt>
|
667
|
+
<dd>
|
668
|
+
<p>
|
669
|
+
The <em>zmq_send()</em> operation cannot be performed on this socket at the moment due
|
670
|
+
to the socket not being in the appropriate state. This error may occur with
|
671
|
+
socket types that switch between several states, such as ZMQ_REP. See the
|
672
|
+
<em>messaging patterns</em> section of <a href="zmq_socket.html">zmq_socket(3)</a> for more information.
|
673
|
+
</p>
|
674
|
+
</dd>
|
675
|
+
<dt class="hdlist1">
|
676
|
+
<strong>ETERM</strong>
|
677
|
+
</dt>
|
678
|
+
<dd>
|
679
|
+
<p>
|
680
|
+
The ØMQ <em>context</em> associated with the specified <em>socket</em> was terminated.
|
681
|
+
</p>
|
682
|
+
</dd>
|
683
|
+
<dt class="hdlist1">
|
684
|
+
<strong>ENOTSOCK</strong>
|
685
|
+
</dt>
|
686
|
+
<dd>
|
687
|
+
<p>
|
688
|
+
The provided <em>socket</em> was invalid.
|
689
|
+
</p>
|
690
|
+
</dd>
|
691
|
+
<dt class="hdlist1">
|
692
|
+
<strong>EINTR</strong>
|
693
|
+
</dt>
|
694
|
+
<dd>
|
695
|
+
<p>
|
696
|
+
The operation was interrupted by delivery of a signal before the message was
|
697
|
+
sent.
|
698
|
+
</p>
|
699
|
+
</dd>
|
700
|
+
<dt class="hdlist1">
|
701
|
+
<strong>EFAULT</strong>
|
702
|
+
</dt>
|
703
|
+
<dd>
|
704
|
+
<p>
|
705
|
+
Invalid message.
|
706
|
+
</p>
|
707
|
+
</dd>
|
708
|
+
</dl></div>
|
709
|
+
</div>
|
710
|
+
<h2 id="_example">EXAMPLE</h2>
|
711
|
+
<div class="sectionbody">
|
712
|
+
<div class="listingblock">
|
713
|
+
<div class="title">Filling in a message and sending it to a socket</div>
|
714
|
+
<div class="content">
|
715
|
+
<pre><tt>/* Create a new message, allocating 6 bytes for message content */
|
716
|
+
zmq_msg_t msg;
|
717
|
+
int rc = zmq_msg_init_size (&msg, 6);
|
718
|
+
assert (rc == 0);
|
719
|
+
/* Fill in message content with 'AAAAAA' */
|
720
|
+
memset (zmq_msg_data (&msg), 'A', 6);
|
721
|
+
/* Send the message to the socket */
|
722
|
+
rc = zmq_send (socket, &msg, 0);
|
723
|
+
assert (rc == 0);</tt></pre>
|
724
|
+
</div></div>
|
725
|
+
<div class="listingblock">
|
726
|
+
<div class="title">Sending a multi-part message</div>
|
727
|
+
<div class="content">
|
728
|
+
<pre><tt>/* Send a multi-part message consisting of three parts to socket */
|
729
|
+
rc = zmq_send (socket, &part1, ZMQ_SNDMORE);
|
730
|
+
rc = zmq_send (socket, &part2, ZMQ_SNDMORE);
|
731
|
+
/* Final part; no more parts to follow */
|
732
|
+
rc = zmq_send (socket, &part3, 0);</tt></pre>
|
733
|
+
</div></div>
|
734
|
+
</div>
|
735
|
+
<h2 id="_see_also">SEE ALSO</h2>
|
736
|
+
<div class="sectionbody">
|
737
|
+
<div class="paragraph"><p><a href="zmq_recv.html">zmq_recv(3)</a>
|
738
|
+
<a href="zmq_socket.html">zmq_socket(7)</a>
|
739
|
+
<a href="zmq.html">zmq(7)</a></p></div>
|
740
|
+
</div>
|
741
|
+
<h2 id="_authors">AUTHORS</h2>
|
742
|
+
<div class="sectionbody">
|
743
|
+
<div class="paragraph"><p>This ØMQ manual page was written by Martin Sustrik <<a href="mailto:sustrik@250bpm.com">sustrik@250bpm.com</a>> and
|
744
|
+
Martin Lucina <<a href="mailto:mato@kotelna.sk">mato@kotelna.sk</a>>.</p></div>
|
745
|
+
</div>
|
746
|
+
</div>
|
747
|
+
<div id="footnotes"><hr /></div>
|
748
|
+
<div id="footer">
|
749
|
+
<div id="footer-text">
|
750
|
+
ØMQ 2.1.6<br />
|
751
|
+
Last updated 2011-05-07 07:13:32 CEST
|
752
|
+
</div>
|
753
|
+
</div>
|
754
|
+
</body>
|
755
|
+
</html>
|