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,371 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2007-2011 iMatix Corporation
|
3
|
+
Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
|
4
|
+
|
5
|
+
This file is part of 0MQ.
|
6
|
+
|
7
|
+
0MQ is free software; you can redistribute it and/or modify it under
|
8
|
+
the terms of the GNU Lesser General Public License as published by
|
9
|
+
the Free Software Foundation; either version 3 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
0MQ is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Lesser General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Lesser General Public License
|
18
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
*/
|
20
|
+
|
21
|
+
#include <string.h>
|
22
|
+
|
23
|
+
#include "../include/zmq.h"
|
24
|
+
|
25
|
+
#include "tcp_listener.hpp"
|
26
|
+
#include "platform.hpp"
|
27
|
+
#include "ip.hpp"
|
28
|
+
#include "config.hpp"
|
29
|
+
#include "err.hpp"
|
30
|
+
|
31
|
+
#ifdef ZMQ_HAVE_WINDOWS
|
32
|
+
|
33
|
+
zmq::tcp_listener_t::tcp_listener_t () :
|
34
|
+
has_file (false),
|
35
|
+
s (retired_fd)
|
36
|
+
{
|
37
|
+
memset (&addr, 0, sizeof (addr));
|
38
|
+
addr_len = 0;
|
39
|
+
}
|
40
|
+
|
41
|
+
zmq::tcp_listener_t::~tcp_listener_t ()
|
42
|
+
{
|
43
|
+
if (s != retired_fd)
|
44
|
+
close ();
|
45
|
+
}
|
46
|
+
|
47
|
+
int zmq::tcp_listener_t::set_address (const char *protocol_, const char *addr_,
|
48
|
+
int backlog_)
|
49
|
+
{
|
50
|
+
// IPC protocol is not supported on Windows platform.
|
51
|
+
if (strcmp (protocol_, "tcp") != 0 ) {
|
52
|
+
errno = EPROTONOSUPPORT;
|
53
|
+
return -1;
|
54
|
+
}
|
55
|
+
|
56
|
+
// Convert the interface into sockaddr_in structure.
|
57
|
+
int rc = resolve_ip_interface (&addr, &addr_len, addr_);
|
58
|
+
if (rc != 0)
|
59
|
+
return rc;
|
60
|
+
|
61
|
+
// Create a listening socket.
|
62
|
+
s = socket (addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
|
63
|
+
if (s == INVALID_SOCKET) {
|
64
|
+
wsa_error_to_errno ();
|
65
|
+
return -1;
|
66
|
+
}
|
67
|
+
|
68
|
+
// Allow reusing of the address.
|
69
|
+
int flag = 1;
|
70
|
+
rc = setsockopt (s, SOL_SOCKET, SO_EXCLUSIVEADDRUSE,
|
71
|
+
(const char*) &flag, sizeof (int));
|
72
|
+
wsa_assert (rc != SOCKET_ERROR);
|
73
|
+
|
74
|
+
// Set the non-blocking flag.
|
75
|
+
u_long uflag = 1;
|
76
|
+
rc = ioctlsocket (s, FIONBIO, &uflag);
|
77
|
+
wsa_assert (rc != SOCKET_ERROR);
|
78
|
+
|
79
|
+
// Bind the socket to the network interface and port.
|
80
|
+
rc = bind (s, (struct sockaddr*) &addr, addr_len);
|
81
|
+
if (rc == SOCKET_ERROR) {
|
82
|
+
wsa_error_to_errno ();
|
83
|
+
return -1;
|
84
|
+
}
|
85
|
+
|
86
|
+
// Listen for incomming connections.
|
87
|
+
rc = listen (s, backlog_);
|
88
|
+
if (rc == SOCKET_ERROR) {
|
89
|
+
wsa_error_to_errno ();
|
90
|
+
return -1;
|
91
|
+
}
|
92
|
+
|
93
|
+
return 0;
|
94
|
+
}
|
95
|
+
|
96
|
+
int zmq::tcp_listener_t::close ()
|
97
|
+
{
|
98
|
+
zmq_assert (s != retired_fd);
|
99
|
+
int rc = closesocket (s);
|
100
|
+
wsa_assert (rc != SOCKET_ERROR);
|
101
|
+
s = retired_fd;
|
102
|
+
return 0;
|
103
|
+
}
|
104
|
+
|
105
|
+
zmq::fd_t zmq::tcp_listener_t::get_fd ()
|
106
|
+
{
|
107
|
+
return s;
|
108
|
+
}
|
109
|
+
|
110
|
+
zmq::fd_t zmq::tcp_listener_t::accept ()
|
111
|
+
{
|
112
|
+
zmq_assert (s != retired_fd);
|
113
|
+
|
114
|
+
// Accept one incoming connection.
|
115
|
+
fd_t sock = ::accept (s, NULL, NULL);
|
116
|
+
if (sock == INVALID_SOCKET &&
|
117
|
+
(WSAGetLastError () == WSAEWOULDBLOCK ||
|
118
|
+
WSAGetLastError () == WSAECONNRESET))
|
119
|
+
return retired_fd;
|
120
|
+
|
121
|
+
zmq_assert (sock != INVALID_SOCKET);
|
122
|
+
|
123
|
+
// Set to non-blocking mode.
|
124
|
+
unsigned long argp = 1;
|
125
|
+
int rc = ioctlsocket (sock, FIONBIO, &argp);
|
126
|
+
wsa_assert (rc != SOCKET_ERROR);
|
127
|
+
|
128
|
+
// Disable Nagle's algorithm.
|
129
|
+
int flag = 1;
|
130
|
+
rc = setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, (char*) &flag,
|
131
|
+
sizeof (int));
|
132
|
+
wsa_assert (rc != SOCKET_ERROR);
|
133
|
+
|
134
|
+
return sock;
|
135
|
+
}
|
136
|
+
|
137
|
+
#else
|
138
|
+
|
139
|
+
#include <unistd.h>
|
140
|
+
#include <sys/socket.h>
|
141
|
+
#include <arpa/inet.h>
|
142
|
+
#include <netinet/tcp.h>
|
143
|
+
#include <netinet/in.h>
|
144
|
+
#include <netdb.h>
|
145
|
+
#include <fcntl.h>
|
146
|
+
|
147
|
+
#ifndef ZMQ_HAVE_OPENVMS
|
148
|
+
#include <sys/un.h>
|
149
|
+
#endif
|
150
|
+
|
151
|
+
#ifdef ZMQ_HAVE_OPENVMS
|
152
|
+
#include <ioctl.h>
|
153
|
+
#endif
|
154
|
+
|
155
|
+
zmq::tcp_listener_t::tcp_listener_t () :
|
156
|
+
has_file (false),
|
157
|
+
s (retired_fd)
|
158
|
+
{
|
159
|
+
memset (&addr, 0, sizeof (addr));
|
160
|
+
}
|
161
|
+
|
162
|
+
zmq::tcp_listener_t::~tcp_listener_t ()
|
163
|
+
{
|
164
|
+
if (s != retired_fd)
|
165
|
+
close ();
|
166
|
+
}
|
167
|
+
|
168
|
+
int zmq::tcp_listener_t::set_address (const char *protocol_, const char *addr_,
|
169
|
+
int backlog_)
|
170
|
+
{
|
171
|
+
if (strcmp (protocol_, "tcp") == 0 ) {
|
172
|
+
|
173
|
+
// Resolve the sockaddr to bind to.
|
174
|
+
int rc = resolve_ip_interface (&addr, &addr_len, addr_);
|
175
|
+
if (rc != 0)
|
176
|
+
return -1;
|
177
|
+
|
178
|
+
// Create a listening socket.
|
179
|
+
s = socket (addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
|
180
|
+
if (s == -1)
|
181
|
+
return -1;
|
182
|
+
|
183
|
+
// Allow reusing of the address.
|
184
|
+
int flag = 1;
|
185
|
+
rc = setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof (int));
|
186
|
+
errno_assert (rc == 0);
|
187
|
+
|
188
|
+
// Set the non-blocking flag.
|
189
|
+
#ifdef ZMQ_HAVE_OPENVMS
|
190
|
+
flag = 1;
|
191
|
+
rc = ioctl (s, FIONBIO, &flag);
|
192
|
+
errno_assert (rc != -1);
|
193
|
+
#else
|
194
|
+
flag = fcntl (s, F_GETFL, 0);
|
195
|
+
if (flag == -1)
|
196
|
+
flag = 0;
|
197
|
+
rc = fcntl (s, F_SETFL, flag | O_NONBLOCK);
|
198
|
+
errno_assert (rc != -1);
|
199
|
+
#endif
|
200
|
+
|
201
|
+
// Bind the socket to the network interface and port.
|
202
|
+
rc = bind (s, (struct sockaddr*) &addr, addr_len);
|
203
|
+
if (rc != 0) {
|
204
|
+
int err = errno;
|
205
|
+
if (close () != 0)
|
206
|
+
return -1;
|
207
|
+
errno = err;
|
208
|
+
return -1;
|
209
|
+
}
|
210
|
+
|
211
|
+
// Listen for incomming connections.
|
212
|
+
rc = listen (s, backlog_);
|
213
|
+
if (rc != 0) {
|
214
|
+
int err = errno;
|
215
|
+
if (close () != 0)
|
216
|
+
return -1;
|
217
|
+
errno = err;
|
218
|
+
return -1;
|
219
|
+
}
|
220
|
+
|
221
|
+
return 0;
|
222
|
+
}
|
223
|
+
#ifndef ZMQ_HAVE_OPENVMS
|
224
|
+
else if (strcmp (protocol_, "ipc") == 0) {
|
225
|
+
|
226
|
+
// Get rid of the file associated with the UNIX domain socket that
|
227
|
+
// may have been left behind by the previous run of the application.
|
228
|
+
::unlink (addr_);
|
229
|
+
|
230
|
+
// Convert the address into sockaddr_un structure.
|
231
|
+
int rc = resolve_local_path (&addr, &addr_len, addr_);
|
232
|
+
if (rc != 0)
|
233
|
+
return -1;
|
234
|
+
|
235
|
+
// Create a listening socket.
|
236
|
+
s = socket (AF_UNIX, SOCK_STREAM, 0);
|
237
|
+
if (s == -1)
|
238
|
+
return -1;
|
239
|
+
|
240
|
+
// Set the non-blocking flag.
|
241
|
+
int flag = fcntl (s, F_GETFL, 0);
|
242
|
+
if (flag == -1)
|
243
|
+
flag = 0;
|
244
|
+
rc = fcntl (s, F_SETFL, flag | O_NONBLOCK);
|
245
|
+
errno_assert (rc != -1);
|
246
|
+
|
247
|
+
// Bind the socket to the file path.
|
248
|
+
rc = bind (s, (struct sockaddr*) &addr, addr_len);
|
249
|
+
if (rc != 0) {
|
250
|
+
int err = errno;
|
251
|
+
if (close () != 0)
|
252
|
+
return -1;
|
253
|
+
errno = err;
|
254
|
+
return -1;
|
255
|
+
}
|
256
|
+
has_file = true;
|
257
|
+
|
258
|
+
// Listen for incomming connections.
|
259
|
+
rc = listen (s, backlog_);
|
260
|
+
if (rc != 0) {
|
261
|
+
int err = errno;
|
262
|
+
if (close () != 0)
|
263
|
+
return -1;
|
264
|
+
errno = err;
|
265
|
+
return -1;
|
266
|
+
}
|
267
|
+
|
268
|
+
return 0;
|
269
|
+
}
|
270
|
+
#endif
|
271
|
+
else {
|
272
|
+
errno = EPROTONOSUPPORT;
|
273
|
+
return -1;
|
274
|
+
}
|
275
|
+
}
|
276
|
+
|
277
|
+
int zmq::tcp_listener_t::close ()
|
278
|
+
{
|
279
|
+
zmq_assert (s != retired_fd);
|
280
|
+
int rc = ::close (s);
|
281
|
+
if (rc != 0)
|
282
|
+
return -1;
|
283
|
+
s = retired_fd;
|
284
|
+
|
285
|
+
#ifndef ZMQ_HAVE_OPENVMS
|
286
|
+
// If there's an underlying UNIX domain socket, get rid of the file it
|
287
|
+
// is associated with.
|
288
|
+
struct sockaddr_un *su = (struct sockaddr_un*) &addr;
|
289
|
+
if (AF_UNIX == su->sun_family && has_file) {
|
290
|
+
rc = ::unlink(su->sun_path);
|
291
|
+
if (rc != 0)
|
292
|
+
return -1;
|
293
|
+
}
|
294
|
+
#endif
|
295
|
+
|
296
|
+
return 0;
|
297
|
+
}
|
298
|
+
|
299
|
+
zmq::fd_t zmq::tcp_listener_t::get_fd ()
|
300
|
+
{
|
301
|
+
return s;
|
302
|
+
}
|
303
|
+
|
304
|
+
zmq::fd_t zmq::tcp_listener_t::accept ()
|
305
|
+
{
|
306
|
+
zmq_assert (s != retired_fd);
|
307
|
+
|
308
|
+
// Accept one incoming connection.
|
309
|
+
fd_t sock = ::accept (s, NULL, NULL);
|
310
|
+
|
311
|
+
#if (defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_FREEBSD || \
|
312
|
+
defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_OSX || \
|
313
|
+
defined ZMQ_HAVE_OPENVMS || defined ZMQ_HAVE_NETBSD || \
|
314
|
+
defined ZMQ_HAVE_CYGWIN)
|
315
|
+
if (sock == -1 &&
|
316
|
+
(errno == EAGAIN || errno == EWOULDBLOCK ||
|
317
|
+
errno == EINTR || errno == ECONNABORTED))
|
318
|
+
return retired_fd;
|
319
|
+
#elif (defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_AIX)
|
320
|
+
if (sock == -1 &&
|
321
|
+
(errno == EWOULDBLOCK || errno == EINTR ||
|
322
|
+
errno == ECONNABORTED || errno == EPROTO))
|
323
|
+
return retired_fd;
|
324
|
+
#elif defined ZMQ_HAVE_HPUX
|
325
|
+
if (sock == -1 &&
|
326
|
+
(errno == EAGAIN || errno == EWOULDBLOCK ||
|
327
|
+
errno == EINTR || errno == ECONNABORTED || errno == ENOBUFS))
|
328
|
+
return retired_fd;
|
329
|
+
#elif defined ZMQ_HAVE_QNXNTO
|
330
|
+
if (sock == -1 &&
|
331
|
+
(errno == EWOULDBLOCK || errno == EINTR || errno == ECONNABORTED))
|
332
|
+
return retired_fd;
|
333
|
+
#endif
|
334
|
+
|
335
|
+
errno_assert (sock != -1);
|
336
|
+
|
337
|
+
// Set to non-blocking mode.
|
338
|
+
#ifdef ZMQ_HAVE_OPENVMS
|
339
|
+
int flags = 1;
|
340
|
+
int rc = ioctl (sock, FIONBIO, &flags);
|
341
|
+
errno_assert (rc != -1);
|
342
|
+
#else
|
343
|
+
int flags = fcntl (s, F_GETFL, 0);
|
344
|
+
if (flags == -1)
|
345
|
+
flags = 0;
|
346
|
+
int rc = fcntl (sock, F_SETFL, flags | O_NONBLOCK);
|
347
|
+
errno_assert (rc != -1);
|
348
|
+
#endif
|
349
|
+
|
350
|
+
struct sockaddr *sa = (struct sockaddr*) &addr;
|
351
|
+
if (AF_UNIX != sa->sa_family) {
|
352
|
+
|
353
|
+
// Disable Nagle's algorithm.
|
354
|
+
int flag = 1;
|
355
|
+
rc = setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, (char*) &flag,
|
356
|
+
sizeof (int));
|
357
|
+
errno_assert (rc == 0);
|
358
|
+
|
359
|
+
#ifdef ZMQ_HAVE_OPENVMS
|
360
|
+
// Disable delayed acknowledgements.
|
361
|
+
flag = 1;
|
362
|
+
rc = setsockopt (sock, IPPROTO_TCP, TCP_NODELACK, (char*) &flag,
|
363
|
+
sizeof (int));
|
364
|
+
errno_assert (rc != SOCKET_ERROR);
|
365
|
+
#endif
|
366
|
+
}
|
367
|
+
|
368
|
+
return sock;
|
369
|
+
}
|
370
|
+
|
371
|
+
#endif
|
@@ -0,0 +1,73 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2007-2011 iMatix Corporation
|
3
|
+
Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
|
4
|
+
|
5
|
+
This file is part of 0MQ.
|
6
|
+
|
7
|
+
0MQ is free software; you can redistribute it and/or modify it under
|
8
|
+
the terms of the GNU Lesser General Public License as published by
|
9
|
+
the Free Software Foundation; either version 3 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
0MQ is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Lesser General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Lesser General Public License
|
18
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
*/
|
20
|
+
|
21
|
+
#ifndef __ZMQ_TCP_LISTENER_HPP_INCLUDED__
|
22
|
+
#define __ZMQ_TCP_LISTENER_HPP_INCLUDED__
|
23
|
+
|
24
|
+
#include "fd.hpp"
|
25
|
+
#include "ip.hpp"
|
26
|
+
|
27
|
+
namespace zmq
|
28
|
+
{
|
29
|
+
|
30
|
+
// The class encapsulating simple TCP listening socket.
|
31
|
+
|
32
|
+
class tcp_listener_t
|
33
|
+
{
|
34
|
+
public:
|
35
|
+
|
36
|
+
tcp_listener_t ();
|
37
|
+
~tcp_listener_t ();
|
38
|
+
|
39
|
+
// Start listening on the interface.
|
40
|
+
int set_address (const char *protocol_, const char *addr_,
|
41
|
+
int backlog_);
|
42
|
+
|
43
|
+
// Close the listening socket.
|
44
|
+
int close ();
|
45
|
+
|
46
|
+
// Get the file descriptor to poll on to get notified about
|
47
|
+
// newly created connections.
|
48
|
+
fd_t get_fd ();
|
49
|
+
|
50
|
+
// Accept the new connection. Returns the file descriptor of the
|
51
|
+
// newly created connection. The function may return retired_fd
|
52
|
+
// if the connection was dropped while waiting in the listen backlog.
|
53
|
+
fd_t accept ();
|
54
|
+
|
55
|
+
private:
|
56
|
+
|
57
|
+
// Address to listen on.
|
58
|
+
sockaddr_storage addr;
|
59
|
+
socklen_t addr_len;
|
60
|
+
|
61
|
+
// True, if the undelying file for UNIX domain socket exists.
|
62
|
+
bool has_file;
|
63
|
+
|
64
|
+
// Underlying socket.
|
65
|
+
fd_t s;
|
66
|
+
|
67
|
+
tcp_listener_t (const tcp_listener_t&);
|
68
|
+
const tcp_listener_t &operator = (const tcp_listener_t&);
|
69
|
+
};
|
70
|
+
|
71
|
+
}
|
72
|
+
|
73
|
+
#endif
|
@@ -0,0 +1,228 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2007-2011 iMatix Corporation
|
3
|
+
Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
|
4
|
+
|
5
|
+
This file is part of 0MQ.
|
6
|
+
|
7
|
+
0MQ is free software; you can redistribute it and/or modify it under
|
8
|
+
the terms of the GNU Lesser General Public License as published by
|
9
|
+
the Free Software Foundation; either version 3 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
0MQ is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Lesser General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Lesser General Public License
|
18
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
*/
|
20
|
+
|
21
|
+
#include "tcp_socket.hpp"
|
22
|
+
#include "platform.hpp"
|
23
|
+
#include "err.hpp"
|
24
|
+
|
25
|
+
#ifdef ZMQ_HAVE_WINDOWS
|
26
|
+
|
27
|
+
zmq::tcp_socket_t::tcp_socket_t () :
|
28
|
+
s (retired_fd)
|
29
|
+
{
|
30
|
+
}
|
31
|
+
|
32
|
+
zmq::tcp_socket_t::~tcp_socket_t ()
|
33
|
+
{
|
34
|
+
if (s != retired_fd)
|
35
|
+
close ();
|
36
|
+
}
|
37
|
+
|
38
|
+
int zmq::tcp_socket_t::open (fd_t fd_, uint64_t sndbuf_, uint64_t rcvbuf_)
|
39
|
+
{
|
40
|
+
zmq_assert (s == retired_fd);
|
41
|
+
s = fd_;
|
42
|
+
|
43
|
+
if (sndbuf_) {
|
44
|
+
int sz = (int) sndbuf_;
|
45
|
+
int rc = setsockopt (s, SOL_SOCKET, SO_SNDBUF,
|
46
|
+
(char*) &sz, sizeof (int));
|
47
|
+
errno_assert (rc == 0);
|
48
|
+
}
|
49
|
+
|
50
|
+
if (rcvbuf_) {
|
51
|
+
int sz = (int) rcvbuf_;
|
52
|
+
int rc = setsockopt (s, SOL_SOCKET, SO_RCVBUF,
|
53
|
+
(char*) &sz, sizeof (int));
|
54
|
+
errno_assert (rc == 0);
|
55
|
+
}
|
56
|
+
|
57
|
+
return 0;
|
58
|
+
}
|
59
|
+
|
60
|
+
int zmq::tcp_socket_t::close ()
|
61
|
+
{
|
62
|
+
zmq_assert (s != retired_fd);
|
63
|
+
int rc = closesocket (s);
|
64
|
+
wsa_assert (rc != SOCKET_ERROR);
|
65
|
+
s = retired_fd;
|
66
|
+
return 0;
|
67
|
+
}
|
68
|
+
|
69
|
+
zmq::fd_t zmq::tcp_socket_t::get_fd ()
|
70
|
+
{
|
71
|
+
return s;
|
72
|
+
}
|
73
|
+
|
74
|
+
int zmq::tcp_socket_t::write (const void *data, int size)
|
75
|
+
{
|
76
|
+
int nbytes = send (s, (char*) data, size, 0);
|
77
|
+
|
78
|
+
// If not a single byte can be written to the socket in non-blocking mode
|
79
|
+
// we'll get an error (this may happen during the speculative write).
|
80
|
+
if (nbytes == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK)
|
81
|
+
return 0;
|
82
|
+
|
83
|
+
// Signalise peer failure.
|
84
|
+
if (nbytes == -1 && (
|
85
|
+
WSAGetLastError () == WSAENETDOWN ||
|
86
|
+
WSAGetLastError () == WSAENETRESET ||
|
87
|
+
WSAGetLastError () == WSAEHOSTUNREACH ||
|
88
|
+
WSAGetLastError () == WSAECONNABORTED ||
|
89
|
+
WSAGetLastError () == WSAETIMEDOUT ||
|
90
|
+
WSAGetLastError () == WSAECONNRESET))
|
91
|
+
return -1;
|
92
|
+
|
93
|
+
wsa_assert (nbytes != SOCKET_ERROR);
|
94
|
+
|
95
|
+
return (size_t) nbytes;
|
96
|
+
}
|
97
|
+
|
98
|
+
int zmq::tcp_socket_t::read (void *data, int size)
|
99
|
+
{
|
100
|
+
int nbytes = recv (s, (char*) data, size, 0);
|
101
|
+
|
102
|
+
// If not a single byte can be read from the socket in non-blocking mode
|
103
|
+
// we'll get an error (this may happen during the speculative read).
|
104
|
+
if (nbytes == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK)
|
105
|
+
return 0;
|
106
|
+
|
107
|
+
// Connection failure.
|
108
|
+
if (nbytes == -1 && (
|
109
|
+
WSAGetLastError () == WSAENETDOWN ||
|
110
|
+
WSAGetLastError () == WSAENETRESET ||
|
111
|
+
WSAGetLastError () == WSAECONNABORTED ||
|
112
|
+
WSAGetLastError () == WSAETIMEDOUT ||
|
113
|
+
WSAGetLastError () == WSAECONNRESET ||
|
114
|
+
WSAGetLastError () == WSAECONNREFUSED ||
|
115
|
+
WSAGetLastError () == WSAENOTCONN))
|
116
|
+
return -1;
|
117
|
+
|
118
|
+
wsa_assert (nbytes != SOCKET_ERROR);
|
119
|
+
|
120
|
+
// Orderly shutdown by the other peer.
|
121
|
+
if (nbytes == 0)
|
122
|
+
return -1;
|
123
|
+
|
124
|
+
return (size_t) nbytes;
|
125
|
+
}
|
126
|
+
|
127
|
+
#else
|
128
|
+
|
129
|
+
#include <unistd.h>
|
130
|
+
#include <sys/socket.h>
|
131
|
+
#include <arpa/inet.h>
|
132
|
+
#include <netinet/tcp.h>
|
133
|
+
#include <netinet/in.h>
|
134
|
+
#include <netdb.h>
|
135
|
+
#include <fcntl.h>
|
136
|
+
|
137
|
+
zmq::tcp_socket_t::tcp_socket_t () :
|
138
|
+
s (retired_fd)
|
139
|
+
{
|
140
|
+
}
|
141
|
+
|
142
|
+
zmq::tcp_socket_t::~tcp_socket_t ()
|
143
|
+
{
|
144
|
+
if (s != retired_fd)
|
145
|
+
close ();
|
146
|
+
}
|
147
|
+
|
148
|
+
int zmq::tcp_socket_t::open (fd_t fd_, uint64_t sndbuf_, uint64_t rcvbuf_)
|
149
|
+
{
|
150
|
+
assert (s == retired_fd);
|
151
|
+
s = fd_;
|
152
|
+
|
153
|
+
if (sndbuf_) {
|
154
|
+
int sz = (int) sndbuf_;
|
155
|
+
int rc = setsockopt (s, SOL_SOCKET, SO_SNDBUF, &sz, sizeof (int));
|
156
|
+
errno_assert (rc == 0);
|
157
|
+
}
|
158
|
+
|
159
|
+
if (rcvbuf_) {
|
160
|
+
int sz = (int) rcvbuf_;
|
161
|
+
int rc = setsockopt (s, SOL_SOCKET, SO_RCVBUF, &sz, sizeof (int));
|
162
|
+
errno_assert (rc == 0);
|
163
|
+
}
|
164
|
+
|
165
|
+
return 0;
|
166
|
+
}
|
167
|
+
|
168
|
+
int zmq::tcp_socket_t::close ()
|
169
|
+
{
|
170
|
+
zmq_assert (s != retired_fd);
|
171
|
+
int rc = ::close (s);
|
172
|
+
if (rc != 0)
|
173
|
+
return -1;
|
174
|
+
s = retired_fd;
|
175
|
+
return 0;
|
176
|
+
}
|
177
|
+
|
178
|
+
zmq::fd_t zmq::tcp_socket_t::get_fd ()
|
179
|
+
{
|
180
|
+
return s;
|
181
|
+
}
|
182
|
+
|
183
|
+
int zmq::tcp_socket_t::write (const void *data, int size)
|
184
|
+
{
|
185
|
+
ssize_t nbytes = send (s, data, size, 0);
|
186
|
+
|
187
|
+
// Several errors are OK. When speculative write is being done we may not
|
188
|
+
// be able to write a single byte to the socket. Also, SIGSTOP issued
|
189
|
+
// by a debugging tool can result in EINTR error.
|
190
|
+
if (nbytes == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ||
|
191
|
+
errno == EINTR))
|
192
|
+
return 0;
|
193
|
+
|
194
|
+
// Signalise peer failure.
|
195
|
+
if (nbytes == -1 && (errno == ECONNRESET || errno == EPIPE))
|
196
|
+
return -1;
|
197
|
+
|
198
|
+
errno_assert (nbytes != -1);
|
199
|
+
return (size_t) nbytes;
|
200
|
+
}
|
201
|
+
|
202
|
+
int zmq::tcp_socket_t::read (void *data, int size)
|
203
|
+
{
|
204
|
+
ssize_t nbytes = recv (s, data, size, 0);
|
205
|
+
|
206
|
+
// Several errors are OK. When speculative read is being done we may not
|
207
|
+
// be able to read a single byte to the socket. Also, SIGSTOP issued
|
208
|
+
// by a debugging tool can result in EINTR error.
|
209
|
+
if (nbytes == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ||
|
210
|
+
errno == EINTR))
|
211
|
+
return 0;
|
212
|
+
|
213
|
+
// Signalise peer failure.
|
214
|
+
if (nbytes == -1 && (errno == ECONNRESET || errno == ECONNREFUSED ||
|
215
|
+
errno == ETIMEDOUT || errno == EHOSTUNREACH))
|
216
|
+
return -1;
|
217
|
+
|
218
|
+
errno_assert (nbytes != -1);
|
219
|
+
|
220
|
+
// Orderly shutdown by the other peer.
|
221
|
+
if (nbytes == 0)
|
222
|
+
return -1;
|
223
|
+
|
224
|
+
return (size_t) nbytes;
|
225
|
+
}
|
226
|
+
|
227
|
+
#endif
|
228
|
+
|