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.
Files changed (300) hide show
  1. data/LICENSE +703 -0
  2. data/README.md +31 -0
  3. data/lib/libzmq.rb +17 -0
  4. data/lib/libzmq/ffi-rzmq.rb +3 -0
  5. data/libzmq/Makefile +5 -0
  6. data/libzmq/extconf.rb +24 -0
  7. data/libzmq/zeromq-2.1.7/AUTHORS +92 -0
  8. data/libzmq/zeromq-2.1.7/COPYING +674 -0
  9. data/libzmq/zeromq-2.1.7/COPYING.LESSER +206 -0
  10. data/libzmq/zeromq-2.1.7/ChangeLog +15620 -0
  11. data/libzmq/zeromq-2.1.7/INSTALL +237 -0
  12. data/libzmq/zeromq-2.1.7/MAINTAINERS +56 -0
  13. data/libzmq/zeromq-2.1.7/Makefile.am +42 -0
  14. data/libzmq/zeromq-2.1.7/Makefile.in +779 -0
  15. data/libzmq/zeromq-2.1.7/NEWS +275 -0
  16. data/libzmq/zeromq-2.1.7/README +39 -0
  17. data/libzmq/zeromq-2.1.7/acinclude.m4 +582 -0
  18. data/libzmq/zeromq-2.1.7/aclocal.m4 +1206 -0
  19. data/libzmq/zeromq-2.1.7/autogen.sh +45 -0
  20. data/libzmq/zeromq-2.1.7/builds/msvc/Makefile.am +8 -0
  21. data/libzmq/zeromq-2.1.7/builds/msvc/Makefile.in +390 -0
  22. data/libzmq/zeromq-2.1.7/builds/msvc/c_local_lat/c_local_lat.vcproj +176 -0
  23. data/libzmq/zeromq-2.1.7/builds/msvc/c_local_thr/c_local_thr.vcproj +176 -0
  24. data/libzmq/zeromq-2.1.7/builds/msvc/c_remote_lat/c_remote_lat.vcproj +176 -0
  25. data/libzmq/zeromq-2.1.7/builds/msvc/c_remote_thr/c_remote_thr.vcproj +176 -0
  26. data/libzmq/zeromq-2.1.7/builds/msvc/libzmq/libzmq.vcproj +783 -0
  27. data/libzmq/zeromq-2.1.7/builds/msvc/msvc.sln +89 -0
  28. data/libzmq/zeromq-2.1.7/builds/msvc/platform.hpp +32 -0
  29. data/libzmq/zeromq-2.1.7/builds/redhat/zeromq.spec.in +139 -0
  30. data/libzmq/zeromq-2.1.7/config/compile +143 -0
  31. data/libzmq/zeromq-2.1.7/config/config.guess +1502 -0
  32. data/libzmq/zeromq-2.1.7/config/config.sub +1714 -0
  33. data/libzmq/zeromq-2.1.7/config/depcomp +630 -0
  34. data/libzmq/zeromq-2.1.7/config/install-sh +520 -0
  35. data/libzmq/zeromq-2.1.7/config/libtool.m4 +7377 -0
  36. data/libzmq/zeromq-2.1.7/config/ltmain.sh +8413 -0
  37. data/libzmq/zeromq-2.1.7/config/ltoptions.m4 +368 -0
  38. data/libzmq/zeromq-2.1.7/config/ltsugar.m4 +123 -0
  39. data/libzmq/zeromq-2.1.7/config/ltversion.m4 +23 -0
  40. data/libzmq/zeromq-2.1.7/config/lt~obsolete.m4 +92 -0
  41. data/libzmq/zeromq-2.1.7/config/missing +376 -0
  42. data/libzmq/zeromq-2.1.7/configure +21645 -0
  43. data/libzmq/zeromq-2.1.7/configure.in +380 -0
  44. data/libzmq/zeromq-2.1.7/doc/Makefile.am +46 -0
  45. data/libzmq/zeromq-2.1.7/doc/Makefile.in +546 -0
  46. data/libzmq/zeromq-2.1.7/doc/asciidoc.conf +56 -0
  47. data/libzmq/zeromq-2.1.7/doc/zmq.7 +242 -0
  48. data/libzmq/zeromq-2.1.7/doc/zmq.html +846 -0
  49. data/libzmq/zeromq-2.1.7/doc/zmq.txt +218 -0
  50. data/libzmq/zeromq-2.1.7/doc/zmq_bind.3 +166 -0
  51. data/libzmq/zeromq-2.1.7/doc/zmq_bind.html +746 -0
  52. data/libzmq/zeromq-2.1.7/doc/zmq_bind.txt +91 -0
  53. data/libzmq/zeromq-2.1.7/doc/zmq_close.3 +81 -0
  54. data/libzmq/zeromq-2.1.7/doc/zmq_close.html +645 -0
  55. data/libzmq/zeromq-2.1.7/doc/zmq_close.txt +52 -0
  56. data/libzmq/zeromq-2.1.7/doc/zmq_connect.3 +161 -0
  57. data/libzmq/zeromq-2.1.7/doc/zmq_connect.html +732 -0
  58. data/libzmq/zeromq-2.1.7/doc/zmq_connect.txt +89 -0
  59. data/libzmq/zeromq-2.1.7/doc/zmq_cpp.7 +410 -0
  60. data/libzmq/zeromq-2.1.7/doc/zmq_cpp.html +765 -0
  61. data/libzmq/zeromq-2.1.7/doc/zmq_cpp.txt +212 -0
  62. data/libzmq/zeromq-2.1.7/doc/zmq_device.3 +140 -0
  63. data/libzmq/zeromq-2.1.7/doc/zmq_device.html +736 -0
  64. data/libzmq/zeromq-2.1.7/doc/zmq_device.txt +138 -0
  65. data/libzmq/zeromq-2.1.7/doc/zmq_epgm.7 +209 -0
  66. data/libzmq/zeromq-2.1.7/doc/zmq_epgm.html +749 -0
  67. data/libzmq/zeromq-2.1.7/doc/zmq_epgm.txt +162 -0
  68. data/libzmq/zeromq-2.1.7/doc/zmq_errno.3 +78 -0
  69. data/libzmq/zeromq-2.1.7/doc/zmq_errno.html +634 -0
  70. data/libzmq/zeromq-2.1.7/doc/zmq_errno.txt +50 -0
  71. data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.3 +944 -0
  72. data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.html +1713 -0
  73. data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.txt +407 -0
  74. data/libzmq/zeromq-2.1.7/doc/zmq_init.3 +71 -0
  75. data/libzmq/zeromq-2.1.7/doc/zmq_init.html +635 -0
  76. data/libzmq/zeromq-2.1.7/doc/zmq_init.txt +51 -0
  77. data/libzmq/zeromq-2.1.7/doc/zmq_inproc.7 +115 -0
  78. data/libzmq/zeromq-2.1.7/doc/zmq_inproc.html +669 -0
  79. data/libzmq/zeromq-2.1.7/doc/zmq_inproc.txt +89 -0
  80. data/libzmq/zeromq-2.1.7/doc/zmq_ipc.7 +109 -0
  81. data/libzmq/zeromq-2.1.7/doc/zmq_ipc.html +662 -0
  82. data/libzmq/zeromq-2.1.7/doc/zmq_ipc.txt +80 -0
  83. data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.3 +81 -0
  84. data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.html +647 -0
  85. data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.txt +55 -0
  86. data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.3 +95 -0
  87. data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.html +656 -0
  88. data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.txt +57 -0
  89. data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.3 +76 -0
  90. data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.html +633 -0
  91. data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.txt +48 -0
  92. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.3 +110 -0
  93. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.html +656 -0
  94. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.txt +65 -0
  95. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.3 +138 -0
  96. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.html +678 -0
  97. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.txt +83 -0
  98. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.3 +97 -0
  99. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.html +656 -0
  100. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.txt +58 -0
  101. data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.3 +79 -0
  102. data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.html +645 -0
  103. data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.txt +52 -0
  104. data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.3 +76 -0
  105. data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.html +633 -0
  106. data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.txt +48 -0
  107. data/libzmq/zeromq-2.1.7/doc/zmq_pgm.7 +209 -0
  108. data/libzmq/zeromq-2.1.7/doc/zmq_pgm.html +749 -0
  109. data/libzmq/zeromq-2.1.7/doc/zmq_pgm.txt +162 -0
  110. data/libzmq/zeromq-2.1.7/doc/zmq_poll.3 +204 -0
  111. data/libzmq/zeromq-2.1.7/doc/zmq_poll.html +755 -0
  112. data/libzmq/zeromq-2.1.7/doc/zmq_poll.txt +132 -0
  113. data/libzmq/zeromq-2.1.7/doc/zmq_recv.3 +172 -0
  114. data/libzmq/zeromq-2.1.7/doc/zmq_recv.html +746 -0
  115. data/libzmq/zeromq-2.1.7/doc/zmq_recv.txt +121 -0
  116. data/libzmq/zeromq-2.1.7/doc/zmq_send.3 +185 -0
  117. data/libzmq/zeromq-2.1.7/doc/zmq_send.html +755 -0
  118. data/libzmq/zeromq-2.1.7/doc/zmq_send.txt +120 -0
  119. data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.3 +878 -0
  120. data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.html +1603 -0
  121. data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.txt +382 -0
  122. data/libzmq/zeromq-2.1.7/doc/zmq_socket.3 +779 -0
  123. data/libzmq/zeromq-2.1.7/doc/zmq_socket.html +1424 -0
  124. data/libzmq/zeromq-2.1.7/doc/zmq_socket.txt +342 -0
  125. data/libzmq/zeromq-2.1.7/doc/zmq_strerror.3 +78 -0
  126. data/libzmq/zeromq-2.1.7/doc/zmq_strerror.html +634 -0
  127. data/libzmq/zeromq-2.1.7/doc/zmq_strerror.txt +55 -0
  128. data/libzmq/zeromq-2.1.7/doc/zmq_tcp.7 +244 -0
  129. data/libzmq/zeromq-2.1.7/doc/zmq_tcp.html +755 -0
  130. data/libzmq/zeromq-2.1.7/doc/zmq_tcp.txt +162 -0
  131. data/libzmq/zeromq-2.1.7/doc/zmq_term.3 +135 -0
  132. data/libzmq/zeromq-2.1.7/doc/zmq_term.html +672 -0
  133. data/libzmq/zeromq-2.1.7/doc/zmq_term.txt +65 -0
  134. data/libzmq/zeromq-2.1.7/doc/zmq_version.3 +78 -0
  135. data/libzmq/zeromq-2.1.7/doc/zmq_version.html +632 -0
  136. data/libzmq/zeromq-2.1.7/doc/zmq_version.txt +53 -0
  137. data/libzmq/zeromq-2.1.7/foreign/openpgm/Makefile.am +8 -0
  138. data/libzmq/zeromq-2.1.7/foreign/openpgm/Makefile.in +588 -0
  139. data/libzmq/zeromq-2.1.7/foreign/openpgm/libpgm-5.1.115~dfsg.tar.gz +0 -0
  140. data/libzmq/zeromq-2.1.7/foreign/xmlParser/xmlParser.cpp +2923 -0
  141. data/libzmq/zeromq-2.1.7/foreign/xmlParser/xmlParser.hpp +762 -0
  142. data/libzmq/zeromq-2.1.7/include/zmq.h +269 -0
  143. data/libzmq/zeromq-2.1.7/include/zmq.hpp +301 -0
  144. data/libzmq/zeromq-2.1.7/include/zmq_utils.h +64 -0
  145. data/libzmq/zeromq-2.1.7/perf/Makefile.am +21 -0
  146. data/libzmq/zeromq-2.1.7/perf/Makefile.in +566 -0
  147. data/libzmq/zeromq-2.1.7/perf/inproc_lat.cpp +232 -0
  148. data/libzmq/zeromq-2.1.7/perf/inproc_thr.cpp +246 -0
  149. data/libzmq/zeromq-2.1.7/perf/local_lat.cpp +108 -0
  150. data/libzmq/zeromq-2.1.7/perf/local_thr.cpp +138 -0
  151. data/libzmq/zeromq-2.1.7/perf/remote_lat.cpp +121 -0
  152. data/libzmq/zeromq-2.1.7/perf/remote_thr.cpp +104 -0
  153. data/libzmq/zeromq-2.1.7/src/Makefile.am +155 -0
  154. data/libzmq/zeromq-2.1.7/src/Makefile.in +1320 -0
  155. data/libzmq/zeromq-2.1.7/src/array.hpp +147 -0
  156. data/libzmq/zeromq-2.1.7/src/atomic_counter.hpp +164 -0
  157. data/libzmq/zeromq-2.1.7/src/atomic_ptr.hpp +159 -0
  158. data/libzmq/zeromq-2.1.7/src/blob.hpp +34 -0
  159. data/libzmq/zeromq-2.1.7/src/clock.cpp +118 -0
  160. data/libzmq/zeromq-2.1.7/src/clock.hpp +60 -0
  161. data/libzmq/zeromq-2.1.7/src/command.cpp +39 -0
  162. data/libzmq/zeromq-2.1.7/src/command.hpp +147 -0
  163. data/libzmq/zeromq-2.1.7/src/config.hpp +88 -0
  164. data/libzmq/zeromq-2.1.7/src/connect_session.cpp +119 -0
  165. data/libzmq/zeromq-2.1.7/src/connect_session.hpp +65 -0
  166. data/libzmq/zeromq-2.1.7/src/ctx.cpp +322 -0
  167. data/libzmq/zeromq-2.1.7/src/ctx.hpp +159 -0
  168. data/libzmq/zeromq-2.1.7/src/decoder.cpp +129 -0
  169. data/libzmq/zeromq-2.1.7/src/decoder.hpp +207 -0
  170. data/libzmq/zeromq-2.1.7/src/device.cpp +120 -0
  171. data/libzmq/zeromq-2.1.7/src/device.hpp +32 -0
  172. data/libzmq/zeromq-2.1.7/src/devpoll.cpp +190 -0
  173. data/libzmq/zeromq-2.1.7/src/devpoll.hpp +100 -0
  174. data/libzmq/zeromq-2.1.7/src/dist.cpp +200 -0
  175. data/libzmq/zeromq-2.1.7/src/dist.hpp +90 -0
  176. data/libzmq/zeromq-2.1.7/src/encoder.cpp +90 -0
  177. data/libzmq/zeromq-2.1.7/src/encoder.hpp +184 -0
  178. data/libzmq/zeromq-2.1.7/src/epoll.cpp +177 -0
  179. data/libzmq/zeromq-2.1.7/src/epoll.hpp +96 -0
  180. data/libzmq/zeromq-2.1.7/src/err.cpp +238 -0
  181. data/libzmq/zeromq-2.1.7/src/err.hpp +145 -0
  182. data/libzmq/zeromq-2.1.7/src/fd.hpp +45 -0
  183. data/libzmq/zeromq-2.1.7/src/fq.cpp +164 -0
  184. data/libzmq/zeromq-2.1.7/src/fq.hpp +80 -0
  185. data/libzmq/zeromq-2.1.7/src/i_engine.hpp +53 -0
  186. data/libzmq/zeromq-2.1.7/src/i_inout.hpp +50 -0
  187. data/libzmq/zeromq-2.1.7/src/i_poll_events.hpp +46 -0
  188. data/libzmq/zeromq-2.1.7/src/io_object.cpp +107 -0
  189. data/libzmq/zeromq-2.1.7/src/io_object.hpp +78 -0
  190. data/libzmq/zeromq-2.1.7/src/io_thread.cpp +109 -0
  191. data/libzmq/zeromq-2.1.7/src/io_thread.hpp +88 -0
  192. data/libzmq/zeromq-2.1.7/src/ip.cpp +339 -0
  193. data/libzmq/zeromq-2.1.7/src/ip.hpp +68 -0
  194. data/libzmq/zeromq-2.1.7/src/kqueue.cpp +194 -0
  195. data/libzmq/zeromq-2.1.7/src/kqueue.hpp +103 -0
  196. data/libzmq/zeromq-2.1.7/src/lb.cpp +174 -0
  197. data/libzmq/zeromq-2.1.7/src/lb.hpp +79 -0
  198. data/libzmq/zeromq-2.1.7/src/libzmq.pc.in +10 -0
  199. data/libzmq/zeromq-2.1.7/src/likely.hpp +33 -0
  200. data/libzmq/zeromq-2.1.7/src/mailbox.cpp +382 -0
  201. data/libzmq/zeromq-2.1.7/src/mailbox.hpp +62 -0
  202. data/libzmq/zeromq-2.1.7/src/msg_content.hpp +52 -0
  203. data/libzmq/zeromq-2.1.7/src/mutex.hpp +121 -0
  204. data/libzmq/zeromq-2.1.7/src/named_session.cpp +85 -0
  205. data/libzmq/zeromq-2.1.7/src/named_session.hpp +57 -0
  206. data/libzmq/zeromq-2.1.7/src/object.cpp +467 -0
  207. data/libzmq/zeromq-2.1.7/src/object.hpp +127 -0
  208. data/libzmq/zeromq-2.1.7/src/options.cpp +336 -0
  209. data/libzmq/zeromq-2.1.7/src/options.hpp +87 -0
  210. data/libzmq/zeromq-2.1.7/src/own.cpp +214 -0
  211. data/libzmq/zeromq-2.1.7/src/own.hpp +140 -0
  212. data/libzmq/zeromq-2.1.7/src/pair.cpp +180 -0
  213. data/libzmq/zeromq-2.1.7/src/pair.hpp +76 -0
  214. data/libzmq/zeromq-2.1.7/src/pgm_receiver.cpp +259 -0
  215. data/libzmq/zeromq-2.1.7/src/pgm_receiver.hpp +129 -0
  216. data/libzmq/zeromq-2.1.7/src/pgm_sender.cpp +215 -0
  217. data/libzmq/zeromq-2.1.7/src/pgm_sender.hpp +105 -0
  218. data/libzmq/zeromq-2.1.7/src/pgm_socket.cpp +705 -0
  219. data/libzmq/zeromq-2.1.7/src/pgm_socket.hpp +118 -0
  220. data/libzmq/zeromq-2.1.7/src/pipe.cpp +409 -0
  221. data/libzmq/zeromq-2.1.7/src/pipe.hpp +214 -0
  222. data/libzmq/zeromq-2.1.7/src/platform.hpp.in +228 -0
  223. data/libzmq/zeromq-2.1.7/src/poll.cpp +180 -0
  224. data/libzmq/zeromq-2.1.7/src/poll.hpp +104 -0
  225. data/libzmq/zeromq-2.1.7/src/poller.hpp +73 -0
  226. data/libzmq/zeromq-2.1.7/src/poller_base.cpp +99 -0
  227. data/libzmq/zeromq-2.1.7/src/poller_base.hpp +84 -0
  228. data/libzmq/zeromq-2.1.7/src/pub.cpp +31 -0
  229. data/libzmq/zeromq-2.1.7/src/pub.hpp +44 -0
  230. data/libzmq/zeromq-2.1.7/src/pull.cpp +61 -0
  231. data/libzmq/zeromq-2.1.7/src/pull.hpp +60 -0
  232. data/libzmq/zeromq-2.1.7/src/push.cpp +62 -0
  233. data/libzmq/zeromq-2.1.7/src/push.hpp +59 -0
  234. data/libzmq/zeromq-2.1.7/src/reaper.cpp +121 -0
  235. data/libzmq/zeromq-2.1.7/src/reaper.hpp +77 -0
  236. data/libzmq/zeromq-2.1.7/src/rep.cpp +131 -0
  237. data/libzmq/zeromq-2.1.7/src/rep.hpp +59 -0
  238. data/libzmq/zeromq-2.1.7/src/req.cpp +121 -0
  239. data/libzmq/zeromq-2.1.7/src/req.hpp +58 -0
  240. data/libzmq/zeromq-2.1.7/src/select.cpp +211 -0
  241. data/libzmq/zeromq-2.1.7/src/select.hpp +116 -0
  242. data/libzmq/zeromq-2.1.7/src/semaphore.hpp +189 -0
  243. data/libzmq/zeromq-2.1.7/src/session.cpp +347 -0
  244. data/libzmq/zeromq-2.1.7/src/session.hpp +150 -0
  245. data/libzmq/zeromq-2.1.7/src/socket_base.cpp +811 -0
  246. data/libzmq/zeromq-2.1.7/src/socket_base.hpp +207 -0
  247. data/libzmq/zeromq-2.1.7/src/stdint.hpp +63 -0
  248. data/libzmq/zeromq-2.1.7/src/sub.cpp +75 -0
  249. data/libzmq/zeromq-2.1.7/src/sub.hpp +50 -0
  250. data/libzmq/zeromq-2.1.7/src/swap.cpp +325 -0
  251. data/libzmq/zeromq-2.1.7/src/swap.hpp +123 -0
  252. data/libzmq/zeromq-2.1.7/src/tcp_connecter.cpp +310 -0
  253. data/libzmq/zeromq-2.1.7/src/tcp_connecter.hpp +81 -0
  254. data/libzmq/zeromq-2.1.7/src/tcp_listener.cpp +371 -0
  255. data/libzmq/zeromq-2.1.7/src/tcp_listener.hpp +73 -0
  256. data/libzmq/zeromq-2.1.7/src/tcp_socket.cpp +228 -0
  257. data/libzmq/zeromq-2.1.7/src/tcp_socket.hpp +72 -0
  258. data/libzmq/zeromq-2.1.7/src/thread.cpp +97 -0
  259. data/libzmq/zeromq-2.1.7/src/thread.hpp +78 -0
  260. data/libzmq/zeromq-2.1.7/src/transient_session.cpp +41 -0
  261. data/libzmq/zeromq-2.1.7/src/transient_session.hpp +52 -0
  262. data/libzmq/zeromq-2.1.7/src/trie.cpp +181 -0
  263. data/libzmq/zeromq-2.1.7/src/trie.hpp +59 -0
  264. data/libzmq/zeromq-2.1.7/src/uuid.cpp +233 -0
  265. data/libzmq/zeromq-2.1.7/src/uuid.hpp +111 -0
  266. data/libzmq/zeromq-2.1.7/src/windows.hpp +79 -0
  267. data/libzmq/zeromq-2.1.7/src/wire.hpp +99 -0
  268. data/libzmq/zeromq-2.1.7/src/xpub.cpp +76 -0
  269. data/libzmq/zeromq-2.1.7/src/xpub.hpp +61 -0
  270. data/libzmq/zeromq-2.1.7/src/xrep.cpp +337 -0
  271. data/libzmq/zeromq-2.1.7/src/xrep.hpp +116 -0
  272. data/libzmq/zeromq-2.1.7/src/xreq.cpp +74 -0
  273. data/libzmq/zeromq-2.1.7/src/xreq.hpp +65 -0
  274. data/libzmq/zeromq-2.1.7/src/xsub.cpp +172 -0
  275. data/libzmq/zeromq-2.1.7/src/xsub.hpp +80 -0
  276. data/libzmq/zeromq-2.1.7/src/ypipe.hpp +209 -0
  277. data/libzmq/zeromq-2.1.7/src/yqueue.hpp +198 -0
  278. data/libzmq/zeromq-2.1.7/src/zmq.cpp +798 -0
  279. data/libzmq/zeromq-2.1.7/src/zmq_connecter.cpp +166 -0
  280. data/libzmq/zeromq-2.1.7/src/zmq_connecter.hpp +92 -0
  281. data/libzmq/zeromq-2.1.7/src/zmq_engine.cpp +220 -0
  282. data/libzmq/zeromq-2.1.7/src/zmq_engine.hpp +87 -0
  283. data/libzmq/zeromq-2.1.7/src/zmq_init.cpp +216 -0
  284. data/libzmq/zeromq-2.1.7/src/zmq_init.hpp +93 -0
  285. data/libzmq/zeromq-2.1.7/src/zmq_listener.cpp +78 -0
  286. data/libzmq/zeromq-2.1.7/src/zmq_listener.hpp +67 -0
  287. data/libzmq/zeromq-2.1.7/tests/Makefile.am +30 -0
  288. data/libzmq/zeromq-2.1.7/tests/Makefile.in +713 -0
  289. data/libzmq/zeromq-2.1.7/tests/test_hwm.cpp +68 -0
  290. data/libzmq/zeromq-2.1.7/tests/test_pair_inproc.cpp +31 -0
  291. data/libzmq/zeromq-2.1.7/tests/test_pair_ipc.cpp +31 -0
  292. data/libzmq/zeromq-2.1.7/tests/test_pair_tcp.cpp +31 -0
  293. data/libzmq/zeromq-2.1.7/tests/test_reqrep_inproc.cpp +31 -0
  294. data/libzmq/zeromq-2.1.7/tests/test_reqrep_ipc.cpp +31 -0
  295. data/libzmq/zeromq-2.1.7/tests/test_reqrep_tcp.cpp +31 -0
  296. data/libzmq/zeromq-2.1.7/tests/test_shutdown_stress.cpp +87 -0
  297. data/libzmq/zeromq-2.1.7/tests/testutil.hpp +130 -0
  298. data/libzmq/zeromq-2.1.7/version.sh +21 -0
  299. data/libzmq/zeromq-2.1.7/zeromq.spec +139 -0
  300. metadata +348 -0
@@ -0,0 +1,1424 @@
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_socket(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
+ /*<![CDATA[*/
438
+ window.onload = function(){asciidoc.footnotes();}
439
+ var asciidoc = { // Namespace.
440
+
441
+ /////////////////////////////////////////////////////////////////////
442
+ // Table Of Contents generator
443
+ /////////////////////////////////////////////////////////////////////
444
+
445
+ /* Author: Mihai Bazon, September 2002
446
+ * http://students.infoiasi.ro/~mishoo
447
+ *
448
+ * Table Of Content generator
449
+ * Version: 0.4
450
+ *
451
+ * Feel free to use this script under the terms of the GNU General Public
452
+ * License, as long as you do not remove or alter this notice.
453
+ */
454
+
455
+ /* modified by Troy D. Hanson, September 2006. License: GPL */
456
+ /* modified by Stuart Rackham, 2006, 2009. License: GPL */
457
+
458
+ // toclevels = 1..4.
459
+ toc: function (toclevels) {
460
+
461
+ function getText(el) {
462
+ var text = "";
463
+ for (var i = el.firstChild; i != null; i = i.nextSibling) {
464
+ if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
465
+ text += i.data;
466
+ else if (i.firstChild != null)
467
+ text += getText(i);
468
+ }
469
+ return text;
470
+ }
471
+
472
+ function TocEntry(el, text, toclevel) {
473
+ this.element = el;
474
+ this.text = text;
475
+ this.toclevel = toclevel;
476
+ }
477
+
478
+ function tocEntries(el, toclevels) {
479
+ var result = new Array;
480
+ var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
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_socket(3) Manual Page
574
+ </h1>
575
+ <h2>NAME</h2>
576
+ <div class="sectionbody">
577
+ <p>zmq_socket -
578
+ create 0MQ 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>void *zmq_socket (void <em>*context</em>, int <em>type</em>);</strong></p></div>
586
+ </div>
587
+ <h2 id="_description">DESCRIPTION</h2>
588
+ <div class="sectionbody">
589
+ <div class="paragraph"><p>The <em>zmq_socket()</em> function shall create a ØMQ socket within the specified
590
+ <em>context</em> and return an opaque handle to the newly created socket. The <em>type</em>
591
+ argument specifies the socket type, which determines the semantics of
592
+ communication over the socket.</p></div>
593
+ <div class="paragraph"><p>The newly created socket is initially unbound, and not associated with any
594
+ endpoints. In order to establish a message flow a socket must first be
595
+ connected to at least one endpoint with <a href="zmq_connect.html">zmq_connect(3)</a>, or at least one
596
+ endpoint must be created for accepting incoming connections with
597
+ <a href="zmq_bind.html">zmq_bind(3)</a>.</p></div>
598
+ <div class="paragraph"><div class="title">Key differences to conventional sockets</div><p>Generally speaking, conventional sockets present a <em>synchronous</em> interface to
599
+ either connection-oriented reliable byte streams (SOCK_STREAM), or
600
+ connection-less unreliable datagrams (SOCK_DGRAM). In comparison, ØMQ sockets
601
+ present an abstraction of an asynchronous <em>message queue</em>, with the exact
602
+ queueing semantics depending on the socket type in use. Where conventional
603
+ sockets transfer streams of bytes or discrete datagrams, ØMQ sockets transfer
604
+ discrete <em>messages</em>.</p></div>
605
+ <div class="paragraph"><p>ØMQ sockets being <em>asynchronous</em> means that the timings of the physical
606
+ connection setup and tear down, reconnect and effective delivery are transparent
607
+ to the user and organized by ØMQ itself. Further, messages may be <em>queued</em> in
608
+ the event that a peer is unavailable to receive them.</p></div>
609
+ <div class="paragraph"><p>Conventional sockets allow only strict one-to-one (two peers), many-to-one
610
+ (many clients, one server), or in some cases one-to-many (multicast)
611
+ relationships. With the exception of <em>ZMQ_PAIR</em>, ØMQ sockets may be connected
612
+ <strong>to multiple endpoints</strong> using <em>zmq_connect()</em>, while simultaneously accepting
613
+ incoming connections <strong>from multiple endpoints</strong> bound to the socket using
614
+ <em>zmq_bind()</em>, thus allowing many-to-many relationships.</p></div>
615
+ <div class="paragraph"><div class="title">Thread safety</div><p>ØMQ <em>sockets</em> are <em>not</em> thread safe. Applications MUST NOT use a socket
616
+ from multiple threads except after migrating a socket from one thread to
617
+ another with a "full fence" memory barrier.</p></div>
618
+ <div class="paragraph"><div class="title">Socket types</div><p>The following sections present the socket types defined by ØMQ, grouped by the
619
+ general <em>messaging pattern</em> which is built from related socket types.</p></div>
620
+ <h3 id="_request_reply_pattern">Request-reply pattern</h3><div style="clear:left"></div>
621
+ <div class="paragraph"><p>The request-reply pattern is used for sending requests from a <em>client</em> to one
622
+ or more instances of a <em>service</em>, and receiving subsequent replies to each
623
+ request sent.</p></div>
624
+ <h4 id="_zmq_req">ZMQ_REQ</h4>
625
+ <div class="paragraph"><p>A socket of type <em>ZMQ_REQ</em> is used by a <em>client</em> to send requests to and
626
+ receive replies from a <em>service</em>. This socket type allows only an alternating
627
+ sequence of <em>zmq_send(request)</em> and subsequent <em>zmq_recv(reply)</em> calls. Each
628
+ request sent is load-balanced among all <em>services</em>, and each reply received is
629
+ matched with the last issued request.</p></div>
630
+ <div class="paragraph"><p>When a <em>ZMQ_REQ</em> socket enters an exceptional state due to having reached the
631
+ high water mark for all <em>services</em>, or if there are no <em>services</em> at all, then
632
+ any <a href="zmq_send.html">zmq_send(3)</a> operations on the socket shall block until the
633
+ exceptional state ends or at least one <em>service</em> becomes available for sending;
634
+ messages are not discarded.</p></div>
635
+ <div class="hdlist"><div class="title">Summary of ZMQ_REQ characteristics</div><table>
636
+ <tr>
637
+ <td class="hdlist1">
638
+ Compatible peer sockets
639
+ <br />
640
+ </td>
641
+ <td class="hdlist2">
642
+ <p style="margin-top: 0;">
643
+ <em>ZMQ_REP</em>
644
+ </p>
645
+ </td>
646
+ </tr>
647
+ <tr>
648
+ <td class="hdlist1">
649
+ Direction
650
+ <br />
651
+ </td>
652
+ <td class="hdlist2">
653
+ <p style="margin-top: 0;">
654
+ Bidirectional
655
+ </p>
656
+ </td>
657
+ </tr>
658
+ <tr>
659
+ <td class="hdlist1">
660
+ Send/receive pattern
661
+ <br />
662
+ </td>
663
+ <td class="hdlist2">
664
+ <p style="margin-top: 0;">
665
+ Send, Receive, Send, Receive, &#8230;
666
+ </p>
667
+ </td>
668
+ </tr>
669
+ <tr>
670
+ <td class="hdlist1">
671
+ Outgoing routing strategy
672
+ <br />
673
+ </td>
674
+ <td class="hdlist2">
675
+ <p style="margin-top: 0;">
676
+ Load-balanced
677
+ </p>
678
+ </td>
679
+ </tr>
680
+ <tr>
681
+ <td class="hdlist1">
682
+ Incoming routing strategy
683
+ <br />
684
+ </td>
685
+ <td class="hdlist2">
686
+ <p style="margin-top: 0;">
687
+ Last peer
688
+ </p>
689
+ </td>
690
+ </tr>
691
+ <tr>
692
+ <td class="hdlist1">
693
+ ZMQ_HWM option action
694
+ <br />
695
+ </td>
696
+ <td class="hdlist2">
697
+ <p style="margin-top: 0;">
698
+ Block
699
+ </p>
700
+ </td>
701
+ </tr>
702
+ </table></div>
703
+ <h4 id="_zmq_rep">ZMQ_REP</h4>
704
+ <div class="paragraph"><p>A socket of type <em>ZMQ_REP</em> is used by a <em>service</em> to receive requests from and
705
+ send replies to a <em>client</em>. This socket type allows only an alternating
706
+ sequence of <em>zmq_recv(request)</em> and subsequent <em>zmq_send(reply)</em> calls. Each
707
+ request received is fair-queued from among all <em>clients</em>, and each reply sent
708
+ is routed to the <em>client</em> that issued the last request. If the original
709
+ requester doesn&#8217;t exist any more the reply is silently discarded.</p></div>
710
+ <div class="paragraph"><p>When a <em>ZMQ_REP</em> socket enters an exceptional state due to having reached the
711
+ high water mark for a <em>client</em>, then any replies sent to the <em>client</em> in
712
+ question shall be dropped until the exceptional state ends.</p></div>
713
+ <div class="hdlist"><div class="title">Summary of ZMQ_REP characteristics</div><table>
714
+ <tr>
715
+ <td class="hdlist1">
716
+ Compatible peer sockets
717
+ <br />
718
+ </td>
719
+ <td class="hdlist2">
720
+ <p style="margin-top: 0;">
721
+ <em>ZMQ_REQ</em>
722
+ </p>
723
+ </td>
724
+ </tr>
725
+ <tr>
726
+ <td class="hdlist1">
727
+ Direction
728
+ <br />
729
+ </td>
730
+ <td class="hdlist2">
731
+ <p style="margin-top: 0;">
732
+ Bidirectional
733
+ </p>
734
+ </td>
735
+ </tr>
736
+ <tr>
737
+ <td class="hdlist1">
738
+ Send/receive pattern
739
+ <br />
740
+ </td>
741
+ <td class="hdlist2">
742
+ <p style="margin-top: 0;">
743
+ Receive, Send, Receive, Send, &#8230;
744
+ </p>
745
+ </td>
746
+ </tr>
747
+ <tr>
748
+ <td class="hdlist1">
749
+ Incoming routing strategy
750
+ <br />
751
+ </td>
752
+ <td class="hdlist2">
753
+ <p style="margin-top: 0;">
754
+ Fair-queued
755
+ </p>
756
+ </td>
757
+ </tr>
758
+ <tr>
759
+ <td class="hdlist1">
760
+ Outgoing routing strategy
761
+ <br />
762
+ </td>
763
+ <td class="hdlist2">
764
+ <p style="margin-top: 0;">
765
+ Last peer
766
+ </p>
767
+ </td>
768
+ </tr>
769
+ <tr>
770
+ <td class="hdlist1">
771
+ ZMQ_HWM option action
772
+ <br />
773
+ </td>
774
+ <td class="hdlist2">
775
+ <p style="margin-top: 0;">
776
+ Drop
777
+ </p>
778
+ </td>
779
+ </tr>
780
+ </table></div>
781
+ <h4 id="_zmq_dealer">ZMQ_DEALER</h4>
782
+ <div class="paragraph"><p>A socket of type <em>ZMQ_DEALER</em> is an advanced pattern used for extending
783
+ request/reply sockets. Each message sent is load-balanced among all connected
784
+ peers, and each message received is fair-queued from all connected peers.</p></div>
785
+ <div class="paragraph"><p>Previously this socket was called <em>ZMQ_XREQ</em> and that name remains available
786
+ for backwards compatibility.</p></div>
787
+ <div class="paragraph"><p>When a <em>ZMQ_DEALER</em> socket enters an exceptional state due to having reached the
788
+ high water mark for all peers, or if there are no peers at all, then any
789
+ <a href="zmq_send.html">zmq_send(3)</a> operations on the socket shall block until the exceptional
790
+ state ends or at least one peer becomes available for sending; messages are not
791
+ discarded.</p></div>
792
+ <div class="paragraph"><p>When a <em>ZMQ_DEALER</em> socket is connected to a <em>ZMQ_REP</em> socket each message sent
793
+ must consist of an empty message part, the <em>delimiter</em>, followed by one or more
794
+ <em>body parts</em>.</p></div>
795
+ <div class="hdlist"><div class="title">Summary of ZMQ_DEALER characteristics</div><table>
796
+ <tr>
797
+ <td class="hdlist1">
798
+ Compatible peer sockets
799
+ <br />
800
+ </td>
801
+ <td class="hdlist2">
802
+ <p style="margin-top: 0;">
803
+ <em>ZMQ_ROUTER</em>, <em>ZMQ_REP</em>
804
+ </p>
805
+ </td>
806
+ </tr>
807
+ <tr>
808
+ <td class="hdlist1">
809
+ Direction
810
+ <br />
811
+ </td>
812
+ <td class="hdlist2">
813
+ <p style="margin-top: 0;">
814
+ Bidirectional
815
+ </p>
816
+ </td>
817
+ </tr>
818
+ <tr>
819
+ <td class="hdlist1">
820
+ Send/receive pattern
821
+ <br />
822
+ </td>
823
+ <td class="hdlist2">
824
+ <p style="margin-top: 0;">
825
+ Unrestricted
826
+ </p>
827
+ </td>
828
+ </tr>
829
+ <tr>
830
+ <td class="hdlist1">
831
+ Outgoing routing strategy
832
+ <br />
833
+ </td>
834
+ <td class="hdlist2">
835
+ <p style="margin-top: 0;">
836
+ Load-balanced
837
+ </p>
838
+ </td>
839
+ </tr>
840
+ <tr>
841
+ <td class="hdlist1">
842
+ Incoming routing strategy
843
+ <br />
844
+ </td>
845
+ <td class="hdlist2">
846
+ <p style="margin-top: 0;">
847
+ Fair-queued
848
+ </p>
849
+ </td>
850
+ </tr>
851
+ <tr>
852
+ <td class="hdlist1">
853
+ ZMQ_HWM option action
854
+ <br />
855
+ </td>
856
+ <td class="hdlist2">
857
+ <p style="margin-top: 0;">
858
+ Block
859
+ </p>
860
+ </td>
861
+ </tr>
862
+ </table></div>
863
+ <h4 id="_zmq_router">ZMQ_ROUTER</h4>
864
+ <div class="paragraph"><p>A socket of type <em>ZMQ_ROUTER</em> is an advanced pattern used for extending
865
+ request/reply sockets. When receiving messages a <em>ZMQ_ROUTER</em> socket shall
866
+ prepend a message part containing the <em>identity</em> of the originating peer to the
867
+ message before passing it to the application. Messages received are fair-queued
868
+ from among all connected peers. When sending messages a <em>ZMQ_ROUTER</em> socket shall
869
+ remove the first part of the message and use it to determine the <em>identity</em> of
870
+ the peer the message shall be routed to. If the peer does not exist anymore
871
+ the message shall be silently discarded.</p></div>
872
+ <div class="paragraph"><p>Previously this socket was called <em>ZMQ_XREP</em> and that name remains available
873
+ for backwards compatibility.</p></div>
874
+ <div class="paragraph"><p>When a <em>ZMQ_ROUTER</em> socket enters an exceptional state due to having reached the
875
+ high water mark for all peers, or if there are no peers at all, then any
876
+ messages sent to the socket shall be dropped until the exceptional state ends.
877
+ Likewise, any messages routed to a non-existent peer or a peer for which the
878
+ individual high water mark has been reached shall also be dropped.</p></div>
879
+ <div class="paragraph"><p>When a <em>ZMQ_REQ</em> socket is connected to a <em>ZMQ_ROUTER</em> socket, in addition to the
880
+ <em>identity</em> of the originating peer each message received shall contain an empty
881
+ <em>delimiter</em> message part. Hence, the entire structure of each received message
882
+ as seen by the application becomes: one or more <em>identity</em> parts, <em>delimiter</em>
883
+ part, one or more <em>body parts</em>. When sending replies to a <em>ZMQ_REQ</em> socket the
884
+ application must include the <em>delimiter</em> part.</p></div>
885
+ <div class="hdlist"><div class="title">Summary of ZMQ_ROUTER characteristics</div><table>
886
+ <tr>
887
+ <td class="hdlist1">
888
+ Compatible peer sockets
889
+ <br />
890
+ </td>
891
+ <td class="hdlist2">
892
+ <p style="margin-top: 0;">
893
+ <em>ZMQ_DEALER</em>, <em>ZMQ_REQ</em>
894
+ </p>
895
+ </td>
896
+ </tr>
897
+ <tr>
898
+ <td class="hdlist1">
899
+ Direction
900
+ <br />
901
+ </td>
902
+ <td class="hdlist2">
903
+ <p style="margin-top: 0;">
904
+ Bidirectional
905
+ </p>
906
+ </td>
907
+ </tr>
908
+ <tr>
909
+ <td class="hdlist1">
910
+ Send/receive pattern
911
+ <br />
912
+ </td>
913
+ <td class="hdlist2">
914
+ <p style="margin-top: 0;">
915
+ Unrestricted
916
+ </p>
917
+ </td>
918
+ </tr>
919
+ <tr>
920
+ <td class="hdlist1">
921
+ Outgoing routing strategy
922
+ <br />
923
+ </td>
924
+ <td class="hdlist2">
925
+ <p style="margin-top: 0;">
926
+ See text
927
+ </p>
928
+ </td>
929
+ </tr>
930
+ <tr>
931
+ <td class="hdlist1">
932
+ Incoming routing strategy
933
+ <br />
934
+ </td>
935
+ <td class="hdlist2">
936
+ <p style="margin-top: 0;">
937
+ Fair-queued
938
+ </p>
939
+ </td>
940
+ </tr>
941
+ <tr>
942
+ <td class="hdlist1">
943
+ ZMQ_HWM option action
944
+ <br />
945
+ </td>
946
+ <td class="hdlist2">
947
+ <p style="margin-top: 0;">
948
+ Drop
949
+ </p>
950
+ </td>
951
+ </tr>
952
+ </table></div>
953
+ <h3 id="_publish_subscribe_pattern">Publish-subscribe pattern</h3><div style="clear:left"></div>
954
+ <div class="paragraph"><p>The publish-subscribe pattern is used for one-to-many distribution of data from
955
+ a single <em>publisher</em> to multiple <em>subscribers</em> in a fan out fashion.</p></div>
956
+ <h4 id="_zmq_pub">ZMQ_PUB</h4>
957
+ <div class="paragraph"><p>A socket of type <em>ZMQ_PUB</em> is used by a <em>publisher</em> to distribute data.
958
+ Messages sent are distributed in a fan out fashion to all connected peers.
959
+ The <a href="zmq_recv.html">zmq_recv(3)</a> function is not implemented for this socket type.</p></div>
960
+ <div class="paragraph"><p>When a <em>ZMQ_PUB</em> socket enters an exceptional state due to having reached the
961
+ high water mark for a <em>subscriber</em>, then any messages that would be sent to the
962
+ <em>subscriber</em> in question shall instead be dropped until the exceptional state
963
+ ends. The <em>zmq_send()</em> function shall never block for this socket type.</p></div>
964
+ <div class="hdlist"><div class="title">Summary of ZMQ_PUB characteristics</div><table>
965
+ <tr>
966
+ <td class="hdlist1">
967
+ Compatible peer sockets
968
+ <br />
969
+ </td>
970
+ <td class="hdlist2">
971
+ <p style="margin-top: 0;">
972
+ <em>ZMQ_SUB</em>
973
+ </p>
974
+ </td>
975
+ </tr>
976
+ <tr>
977
+ <td class="hdlist1">
978
+ Direction
979
+ <br />
980
+ </td>
981
+ <td class="hdlist2">
982
+ <p style="margin-top: 0;">
983
+ Unidirectional
984
+ </p>
985
+ </td>
986
+ </tr>
987
+ <tr>
988
+ <td class="hdlist1">
989
+ Send/receive pattern
990
+ <br />
991
+ </td>
992
+ <td class="hdlist2">
993
+ <p style="margin-top: 0;">
994
+ Send only
995
+ </p>
996
+ </td>
997
+ </tr>
998
+ <tr>
999
+ <td class="hdlist1">
1000
+ Incoming routing strategy
1001
+ <br />
1002
+ </td>
1003
+ <td class="hdlist2">
1004
+ <p style="margin-top: 0;">
1005
+ N/A
1006
+ </p>
1007
+ </td>
1008
+ </tr>
1009
+ <tr>
1010
+ <td class="hdlist1">
1011
+ Outgoing routing strategy
1012
+ <br />
1013
+ </td>
1014
+ <td class="hdlist2">
1015
+ <p style="margin-top: 0;">
1016
+ Fan out
1017
+ </p>
1018
+ </td>
1019
+ </tr>
1020
+ <tr>
1021
+ <td class="hdlist1">
1022
+ ZMQ_HWM option action
1023
+ <br />
1024
+ </td>
1025
+ <td class="hdlist2">
1026
+ <p style="margin-top: 0;">
1027
+ Drop
1028
+ </p>
1029
+ </td>
1030
+ </tr>
1031
+ </table></div>
1032
+ <h4 id="_zmq_sub">ZMQ_SUB</h4>
1033
+ <div class="paragraph"><p>A socket of type <em>ZMQ_SUB</em> is used by a <em>subscriber</em> to subscribe to data
1034
+ distributed by a <em>publisher</em>. Initially a <em>ZMQ_SUB</em> socket is not subscribed to
1035
+ any messages, use the <em>ZMQ_SUBSCRIBE</em> option of <a href="zmq_setsockopt.html">zmq_setsockopt(3)</a> to
1036
+ specify which messages to subscribe to. The <em>zmq_send()</em> function is not
1037
+ implemented for this socket type.</p></div>
1038
+ <div class="hdlist"><div class="title">Summary of ZMQ_SUB characteristics</div><table>
1039
+ <tr>
1040
+ <td class="hdlist1">
1041
+ Compatible peer sockets
1042
+ <br />
1043
+ </td>
1044
+ <td class="hdlist2">
1045
+ <p style="margin-top: 0;">
1046
+ <em>ZMQ_PUB</em>
1047
+ </p>
1048
+ </td>
1049
+ </tr>
1050
+ <tr>
1051
+ <td class="hdlist1">
1052
+ Direction
1053
+ <br />
1054
+ </td>
1055
+ <td class="hdlist2">
1056
+ <p style="margin-top: 0;">
1057
+ Unidirectional
1058
+ </p>
1059
+ </td>
1060
+ </tr>
1061
+ <tr>
1062
+ <td class="hdlist1">
1063
+ Send/receive pattern
1064
+ <br />
1065
+ </td>
1066
+ <td class="hdlist2">
1067
+ <p style="margin-top: 0;">
1068
+ Receive only
1069
+ </p>
1070
+ </td>
1071
+ </tr>
1072
+ <tr>
1073
+ <td class="hdlist1">
1074
+ Incoming routing strategy
1075
+ <br />
1076
+ </td>
1077
+ <td class="hdlist2">
1078
+ <p style="margin-top: 0;">
1079
+ Fair-queued
1080
+ </p>
1081
+ </td>
1082
+ </tr>
1083
+ <tr>
1084
+ <td class="hdlist1">
1085
+ Outgoing routing strategy
1086
+ <br />
1087
+ </td>
1088
+ <td class="hdlist2">
1089
+ <p style="margin-top: 0;">
1090
+ N/A
1091
+ </p>
1092
+ </td>
1093
+ </tr>
1094
+ <tr>
1095
+ <td class="hdlist1">
1096
+ ZMQ_HWM option action
1097
+ <br />
1098
+ </td>
1099
+ <td class="hdlist2">
1100
+ <p style="margin-top: 0;">
1101
+ Drop
1102
+ </p>
1103
+ </td>
1104
+ </tr>
1105
+ </table></div>
1106
+ <h3 id="_pipeline_pattern">Pipeline pattern</h3><div style="clear:left"></div>
1107
+ <div class="paragraph"><p>The pipeline pattern is used for distributing data to <em>nodes</em> arranged in
1108
+ a pipeline. Data always flows down the pipeline, and each stage of the pipeline
1109
+ is connected to at least one <em>node</em>. When a pipeline stage is connected to
1110
+ multiple <em>nodes</em> data is load-balanced among all connected <em>nodes</em>.</p></div>
1111
+ <h4 id="_zmq_push">ZMQ_PUSH</h4>
1112
+ <div class="paragraph"><p>A socket of type <em>ZMQ_PUSH</em> is used by a pipeline <em>node</em> to send messages
1113
+ to downstream pipeline <em>nodes</em>. Messages are load-balanced to all connected
1114
+ downstream <em>nodes</em>. The <em>zmq_recv()</em> function is not implemented for this
1115
+ socket type.</p></div>
1116
+ <div class="paragraph"><p>When a <em>ZMQ_PUSH</em> socket enters an exceptional state due to having reached the
1117
+ high water mark for all downstream <em>nodes</em>, or if there are no downstream
1118
+ <em>nodes</em> at all, then any <a href="zmq_send.html">zmq_send(3)</a> operations on the socket shall
1119
+ block until the exceptional state ends or at least one downstream <em>node</em>
1120
+ becomes available for sending; messages are not discarded.</p></div>
1121
+ <div class="paragraph"><p>Deprecated alias: <em>ZMQ_DOWNSTREAM</em>.</p></div>
1122
+ <div class="hdlist"><div class="title">Summary of ZMQ_PUSH characteristics</div><table>
1123
+ <tr>
1124
+ <td class="hdlist1">
1125
+ Compatible peer sockets
1126
+ <br />
1127
+ </td>
1128
+ <td class="hdlist2">
1129
+ <p style="margin-top: 0;">
1130
+ <em>ZMQ_PULL</em>
1131
+ </p>
1132
+ </td>
1133
+ </tr>
1134
+ <tr>
1135
+ <td class="hdlist1">
1136
+ Direction
1137
+ <br />
1138
+ </td>
1139
+ <td class="hdlist2">
1140
+ <p style="margin-top: 0;">
1141
+ Unidirectional
1142
+ </p>
1143
+ </td>
1144
+ </tr>
1145
+ <tr>
1146
+ <td class="hdlist1">
1147
+ Send/receive pattern
1148
+ <br />
1149
+ </td>
1150
+ <td class="hdlist2">
1151
+ <p style="margin-top: 0;">
1152
+ Send only
1153
+ </p>
1154
+ </td>
1155
+ </tr>
1156
+ <tr>
1157
+ <td class="hdlist1">
1158
+ Incoming routing strategy
1159
+ <br />
1160
+ </td>
1161
+ <td class="hdlist2">
1162
+ <p style="margin-top: 0;">
1163
+ N/A
1164
+ </p>
1165
+ </td>
1166
+ </tr>
1167
+ <tr>
1168
+ <td class="hdlist1">
1169
+ Outgoing routing strategy
1170
+ <br />
1171
+ </td>
1172
+ <td class="hdlist2">
1173
+ <p style="margin-top: 0;">
1174
+ Load-balanced
1175
+ </p>
1176
+ </td>
1177
+ </tr>
1178
+ <tr>
1179
+ <td class="hdlist1">
1180
+ ZMQ_HWM option action
1181
+ <br />
1182
+ </td>
1183
+ <td class="hdlist2">
1184
+ <p style="margin-top: 0;">
1185
+ Block
1186
+ </p>
1187
+ </td>
1188
+ </tr>
1189
+ </table></div>
1190
+ <h4 id="_zmq_pull">ZMQ_PULL</h4>
1191
+ <div class="paragraph"><p>A socket of type <em>ZMQ_PULL</em> is used by a pipeline <em>node</em> to receive messages
1192
+ from upstream pipeline <em>nodes</em>. Messages are fair-queued from among all
1193
+ connected upstream <em>nodes</em>. The <em>zmq_send()</em> function is not implemented for
1194
+ this socket type.</p></div>
1195
+ <div class="paragraph"><p>Deprecated alias: <em>ZMQ_UPSTREAM</em>.</p></div>
1196
+ <div class="hdlist"><div class="title">Summary of ZMQ_PULL characteristics</div><table>
1197
+ <tr>
1198
+ <td class="hdlist1">
1199
+ Compatible peer sockets
1200
+ <br />
1201
+ </td>
1202
+ <td class="hdlist2">
1203
+ <p style="margin-top: 0;">
1204
+ <em>ZMQ_PUSH</em>
1205
+ </p>
1206
+ </td>
1207
+ </tr>
1208
+ <tr>
1209
+ <td class="hdlist1">
1210
+ Direction
1211
+ <br />
1212
+ </td>
1213
+ <td class="hdlist2">
1214
+ <p style="margin-top: 0;">
1215
+ Unidirectional
1216
+ </p>
1217
+ </td>
1218
+ </tr>
1219
+ <tr>
1220
+ <td class="hdlist1">
1221
+ Send/receive pattern
1222
+ <br />
1223
+ </td>
1224
+ <td class="hdlist2">
1225
+ <p style="margin-top: 0;">
1226
+ Receive only
1227
+ </p>
1228
+ </td>
1229
+ </tr>
1230
+ <tr>
1231
+ <td class="hdlist1">
1232
+ Incoming routing strategy
1233
+ <br />
1234
+ </td>
1235
+ <td class="hdlist2">
1236
+ <p style="margin-top: 0;">
1237
+ Fair-queued
1238
+ </p>
1239
+ </td>
1240
+ </tr>
1241
+ <tr>
1242
+ <td class="hdlist1">
1243
+ Outgoing routing strategy
1244
+ <br />
1245
+ </td>
1246
+ <td class="hdlist2">
1247
+ <p style="margin-top: 0;">
1248
+ N/A
1249
+ </p>
1250
+ </td>
1251
+ </tr>
1252
+ <tr>
1253
+ <td class="hdlist1">
1254
+ ZMQ_HWM option action
1255
+ <br />
1256
+ </td>
1257
+ <td class="hdlist2">
1258
+ <p style="margin-top: 0;">
1259
+ N/A
1260
+ </p>
1261
+ </td>
1262
+ </tr>
1263
+ </table></div>
1264
+ <h3 id="_exclusive_pair_pattern">Exclusive pair pattern</h3><div style="clear:left"></div>
1265
+ <div class="paragraph"><p>The exclusive pair pattern is used to connect a peer to precisely one other
1266
+ peer. This pattern is used for inter-thread communication across the inproc
1267
+ transport.</p></div>
1268
+ <h4 id="_zmq_pair">ZMQ_PAIR</h4>
1269
+ <div class="paragraph"><p>A socket of type <em>ZMQ_PAIR</em> can only be connected to a single peer at any one
1270
+ time. No message routing or filtering is performed on messages sent over a
1271
+ <em>ZMQ_PAIR</em> socket.</p></div>
1272
+ <div class="paragraph"><p>When a <em>ZMQ_PAIR</em> socket enters an exceptional state due to having reached the
1273
+ high water mark for the connected peer, or if no peer is connected, then
1274
+ any <a href="zmq_send.html">zmq_send(3)</a> operations on the socket shall block until the peer
1275
+ becomes available for sending; messages are not discarded.</p></div>
1276
+ <div class="admonitionblock">
1277
+ <table><tr>
1278
+ <td class="icon">
1279
+ <div class="title">Note</div>
1280
+ </td>
1281
+ <td class="content"><em>ZMQ_PAIR</em> sockets are designed for inter-thread communication across
1282
+ the <a href="zmq_inproc.html">zmq_inproc(7)</a> transport and do not implement functionality such
1283
+ as auto-reconnection. <em>ZMQ_PAIR</em> sockets are considered experimental and may
1284
+ have other missing or broken aspects.</td>
1285
+ </tr></table>
1286
+ </div>
1287
+ <div class="hdlist"><div class="title">Summary of ZMQ_PAIR characteristics</div><table>
1288
+ <tr>
1289
+ <td class="hdlist1">
1290
+ Compatible peer sockets
1291
+ <br />
1292
+ </td>
1293
+ <td class="hdlist2">
1294
+ <p style="margin-top: 0;">
1295
+ <em>ZMQ_PAIR</em>
1296
+ </p>
1297
+ </td>
1298
+ </tr>
1299
+ <tr>
1300
+ <td class="hdlist1">
1301
+ Direction
1302
+ <br />
1303
+ </td>
1304
+ <td class="hdlist2">
1305
+ <p style="margin-top: 0;">
1306
+ Bidirectional
1307
+ </p>
1308
+ </td>
1309
+ </tr>
1310
+ <tr>
1311
+ <td class="hdlist1">
1312
+ Send/receive pattern
1313
+ <br />
1314
+ </td>
1315
+ <td class="hdlist2">
1316
+ <p style="margin-top: 0;">
1317
+ Unrestricted
1318
+ </p>
1319
+ </td>
1320
+ </tr>
1321
+ <tr>
1322
+ <td class="hdlist1">
1323
+ Incoming routing strategy
1324
+ <br />
1325
+ </td>
1326
+ <td class="hdlist2">
1327
+ <p style="margin-top: 0;">
1328
+ N/A
1329
+ </p>
1330
+ </td>
1331
+ </tr>
1332
+ <tr>
1333
+ <td class="hdlist1">
1334
+ Outgoing routing strategy
1335
+ <br />
1336
+ </td>
1337
+ <td class="hdlist2">
1338
+ <p style="margin-top: 0;">
1339
+ N/A
1340
+ </p>
1341
+ </td>
1342
+ </tr>
1343
+ <tr>
1344
+ <td class="hdlist1">
1345
+ ZMQ_HWM option action
1346
+ <br />
1347
+ </td>
1348
+ <td class="hdlist2">
1349
+ <p style="margin-top: 0;">
1350
+ Block
1351
+ </p>
1352
+ </td>
1353
+ </tr>
1354
+ </table></div>
1355
+ </div>
1356
+ <h2 id="_return_value">RETURN VALUE</h2>
1357
+ <div class="sectionbody">
1358
+ <div class="paragraph"><p>The <em>zmq_socket()</em> function shall return an opaque handle to the newly created
1359
+ socket if successful. Otherwise, it shall return NULL and set <em>errno</em> to one of
1360
+ the values defined below.</p></div>
1361
+ </div>
1362
+ <h2 id="_errors">ERRORS</h2>
1363
+ <div class="sectionbody">
1364
+ <div class="dlist"><dl>
1365
+ <dt class="hdlist1">
1366
+ <strong>EINVAL</strong>
1367
+ </dt>
1368
+ <dd>
1369
+ <p>
1370
+ The requested socket <em>type</em> is invalid.
1371
+ </p>
1372
+ </dd>
1373
+ <dt class="hdlist1">
1374
+ <strong>EFAULT</strong>
1375
+ </dt>
1376
+ <dd>
1377
+ <p>
1378
+ The provided <em>context</em> is invalid.
1379
+ </p>
1380
+ </dd>
1381
+ <dt class="hdlist1">
1382
+ <strong>EMFILE</strong>
1383
+ </dt>
1384
+ <dd>
1385
+ <p>
1386
+ The limit on the total number of open ØMQ sockets has been reached.
1387
+ </p>
1388
+ </dd>
1389
+ <dt class="hdlist1">
1390
+ <strong>ETERM</strong>
1391
+ </dt>
1392
+ <dd>
1393
+ <p>
1394
+ The context specified was terminated.
1395
+ </p>
1396
+ </dd>
1397
+ </dl></div>
1398
+ </div>
1399
+ <h2 id="_see_also">SEE ALSO</h2>
1400
+ <div class="sectionbody">
1401
+ <div class="paragraph"><p><a href="zmq_init.html">zmq_init(3)</a>
1402
+ <a href="zmq_setsockopt.html">zmq_setsockopt(3)</a>
1403
+ <a href="zmq_bind.html">zmq_bind(3)</a>
1404
+ <a href="zmq_connect.html">zmq_connect(3)</a>
1405
+ <a href="zmq_send.html">zmq_send(3)</a>
1406
+ <a href="zmq_recv.html">zmq_recv(3)</a>
1407
+ <a href="zmq_inproc.html">zmq_inproc(7)</a>
1408
+ <a href="zmq.html">zmq(7)</a></p></div>
1409
+ </div>
1410
+ <h2 id="_authors">AUTHORS</h2>
1411
+ <div class="sectionbody">
1412
+ <div class="paragraph"><p>This ØMQ manual page was written by Martin Sustrik &lt;<a href="mailto:sustrik@250bpm.com">sustrik@250bpm.com</a>&gt; and
1413
+ Martin Lucina &lt;<a href="mailto:mato@kotelna.sk">mato@kotelna.sk</a>&gt;.</p></div>
1414
+ </div>
1415
+ </div>
1416
+ <div id="footnotes"><hr /></div>
1417
+ <div id="footer">
1418
+ <div id="footer-text">
1419
+ ØMQ 2.1.6<br />
1420
+ Last updated 2011-05-06 12:35:19 CEST
1421
+ </div>
1422
+ </div>
1423
+ </body>
1424
+ </html>