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,138 @@
1
+ zmq_device(3)
2
+ =============
3
+
4
+ NAME
5
+ ----
6
+ zmq_device - start built-in 0MQ device
7
+
8
+
9
+ SYNOPSIS
10
+ --------
11
+ *int zmq_device (int 'device', const void '*frontend', const void '*backend');*
12
+
13
+
14
+ DESCRIPTION
15
+ -----------
16
+ The _zmq_device()_ function starts a built-in 0MQ device. The 'device' argument
17
+ is one of:
18
+
19
+ 'ZMQ_QUEUE'::
20
+ starts a queue device
21
+ 'ZMQ_FORWARDER'::
22
+ starts a forwarder device
23
+ 'ZMQ_STREAMER'::
24
+ starts a streamer device
25
+
26
+ The device connects a frontend socket to a backend socket. Conceptually, data
27
+ flows from frontend to backend. Depending on the socket types, replies may flow
28
+ in the opposite direction.
29
+
30
+ Before calling _zmq_device()_ you must set any socket options, and connect or
31
+ bind both frontend and backend sockets. The two conventional device models are:
32
+
33
+ *proxy*::
34
+ bind frontend socket to an endpoint, and connect backend socket to
35
+ downstream components. A proxy device model does not require changes to
36
+ the downstream topology but that topology is static (any changes require
37
+ reconfiguring the device).
38
+ *broker*::
39
+ bind frontend socket to one endpoint and bind backend socket to a second
40
+ endpoint. Downstream components must now connect into the device. A broker
41
+ device model allows a dynamic downstream topology (components can come and
42
+ go at any time).
43
+
44
+ _zmq_device()_ runs in the current thread and returns only if/when the current
45
+ context is closed.
46
+
47
+
48
+ QUEUE DEVICE
49
+ ------------
50
+ 'ZMQ_QUEUE' creates a shared queue that collects requests from a set of clients,
51
+ and distributes these fairly among a set of services. Requests are fair-queued
52
+ from frontend connections and load-balanced between backend connections.
53
+ Replies automatically return to the client that made the original request.
54
+
55
+ This device is part of the 'request-reply' pattern. The frontend speaks to
56
+ clients and the backend speaks to services. You should use 'ZMQ_QUEUE' with a
57
+ 'ZMQ_XREP' socket for the frontend and a 'ZMQ_XREQ' socket for the backend.
58
+ Other combinations are not documented.
59
+
60
+ Refer to linkzmq:zmq_socket[3] for a description of these socket types.
61
+
62
+
63
+ FORWARDER DEVICE
64
+ ----------------
65
+ 'ZMQ_FORWARDER' collects messages from a set of publishers and forwards these to
66
+ a set of subscribers. You will generally use this to bridge networks, e.g. read
67
+ on TCP unicast and forward on multicast.
68
+
69
+ This device is part of the 'publish-subscribe' pattern. The frontend speaks to
70
+ publishers and the backend speaks to subscribers. You should use
71
+ 'ZMQ_FORWARDER' with a 'ZMQ_SUB' socket for the frontend and a 'ZMQ_PUB' socket
72
+ for the backend. Other combinations are not documented.
73
+
74
+ Refer to linkzmq:zmq_socket[3] for a description of these socket types.
75
+
76
+
77
+ STREAMER DEVICE
78
+ ---------------
79
+ 'ZMQ_STREAMER' collects tasks from a set of pushers and forwards these to a set
80
+ of pullers. You will generally use this to bridge networks. Messages are
81
+ fair-queued from pushers and load-balanced to pullers.
82
+
83
+ This device is part of the 'pipeline' pattern. The frontend speaks to pushers
84
+ and the backend speaks to pullers. You should use 'ZMQ_STREAMER' with a
85
+ 'ZMQ_PULL' socket for the frontend and a 'ZMQ_PUSH' socket for the backend.
86
+ Other combinations are not documented.
87
+
88
+ Refer to linkzmq:zmq_socket[3] for a description of these socket types.
89
+
90
+
91
+ RETURN VALUE
92
+ ------------
93
+ The _zmq_device()_ function always returns `-1` and 'errno' set to *ETERM* (the
94
+ 0MQ 'context' associated with either of the specified sockets was terminated).
95
+
96
+
97
+ EXAMPLE
98
+ -------
99
+ .Creating a queue broker
100
+ ----
101
+ // Create frontend and backend sockets
102
+ void *frontend = zmq_socket (context, ZMQ_XREP);
103
+ assert (backend);
104
+ void *backend = zmq_socket (context, ZMQ_XREQ);
105
+ assert (frontend);
106
+ // Bind both sockets to TCP ports
107
+ assert (zmq_bind (frontend, "tcp://*:5555") == 0);
108
+ assert (zmq_bind (backend, "tcp://*:5556") == 0);
109
+ // Start a queue device
110
+ zmq_device (ZMQ_QUEUE, frontend, backend);
111
+ ----
112
+
113
+
114
+ SEE ALSO
115
+ --------
116
+ linkzmq:zmq_bind[3]
117
+ linkzmq:zmq_connect[3]
118
+ linkzmq:zmq_socket[3]
119
+ linkzmq:zmq[7]
120
+
121
+
122
+ AUTHORS
123
+ -------
124
+ This 0MQ manual page was written by Pieter Hintjens <ph@imatix.com>
125
+
126
+
127
+ RESOURCES
128
+ ---------
129
+ Main web site: <http://www.zeromq.org/>
130
+
131
+ Report bugs to the 0MQ development mailing list: <zeromq-dev@lists.zeromq.org>
132
+
133
+
134
+ COPYING
135
+ -------
136
+ Free use of this software is granted under the terms of the GNU Lesser General
137
+ Public License (LGPL). For details see the files `COPYING` and `COPYING.LESSER`
138
+ included with the 0MQ distribution.
@@ -0,0 +1,209 @@
1
+ '\" t
2
+ .\" Title: zmq_pgm
3
+ .\" Author: [see the "AUTHORS" section]
4
+ .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
5
+ .\" Date: 05/06/2011
6
+ .\" Manual: 0MQ Manual
7
+ .\" Source: 0MQ 2.1.6
8
+ .\" Language: English
9
+ .\"
10
+ .TH "ZMQ_PGM" "7" "05/06/2011" "0MQ 2\&.1\&.6" "0MQ Manual"
11
+ .\" -----------------------------------------------------------------
12
+ .\" * Define some portability stuff
13
+ .\" -----------------------------------------------------------------
14
+ .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15
+ .\" http://bugs.debian.org/507673
16
+ .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
17
+ .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18
+ .ie \n(.g .ds Aq \(aq
19
+ .el .ds Aq '
20
+ .\" -----------------------------------------------------------------
21
+ .\" * set default formatting
22
+ .\" -----------------------------------------------------------------
23
+ .\" disable hyphenation
24
+ .nh
25
+ .\" disable justification (adjust text to left margin only)
26
+ .ad l
27
+ .\" -----------------------------------------------------------------
28
+ .\" * MAIN CONTENT STARTS HERE *
29
+ .\" -----------------------------------------------------------------
30
+ .SH "NAME"
31
+ zmq_pgm \- 0MQ reliable multicast transport using PGM
32
+ .SH "SYNOPSIS"
33
+ .sp
34
+ PGM (Pragmatic General Multicast) is a protocol for reliable multicast transport of data over IP networks\&.
35
+ .SH "DESCRIPTION"
36
+ .sp
37
+ 0MQ implements two variants of PGM, the standard protocol where PGM datagrams are layered directly on top of IP datagrams as defined by RFC 3208 (the \fIpgm\fR transport) and "Encapsulated PGM" where PGM datagrams are encapsulated inside UDP datagrams (the \fIepgm\fR transport)\&.
38
+ .sp
39
+ The \fIpgm\fR and \fIepgm\fR transports can only be used with the \fIZMQ_PUB\fR and \fIZMQ_SUB\fR socket types\&.
40
+ .sp
41
+ Further, PGM sockets are rate limited by default and incur a performance penalty when used over a loop\-back interface\&. For details, refer to the \fIZMQ_RATE\fR, \fIZMQ_RECOVERY_IVL\fR and \fIZMQ_MCAST_LOOP\fR options documented in \fBzmq_setsockopt\fR(3)\&.
42
+ .if n \{\
43
+ .sp
44
+ .\}
45
+ .RS 4
46
+ .it 1 an-trap
47
+ .nr an-no-space-flag 1
48
+ .nr an-break-flag 1
49
+ .br
50
+ .ps +1
51
+ \fBCaution\fR
52
+ .ps -1
53
+ .br
54
+ .sp
55
+ The \fIpgm\fR transport implementation requires access to raw IP sockets\&. Additional privileges may be required on some operating systems for this operation\&. Applications not requiring direct interoperability with other PGM implementations are encouraged to use the \fIepgm\fR transport instead which does not require any special privileges\&.
56
+ .sp .5v
57
+ .RE
58
+ .SH "ADDRESSING"
59
+ .sp
60
+ A 0MQ address string consists of two parts as follows: \fItransport\fR://\fIendpoint\fR\&. The \fItransport\fR part specifies the underlying transport protocol to use\&. For the standard PGM protocol, \fItransport\fR shall be set to pgm\&. For the "Encapsulated PGM" protocol \fItransport\fR shall be set to epgm\&. The meaning of the \fIendpoint\fR part for both the \fIpgm\fR and \fIepgm\fR transport is defined below\&.
61
+ .SS "Connecting a socket"
62
+ .sp
63
+ When connecting a socket to a peer address using \fIzmq_connect()\fR with the \fIpgm\fR or \fIepgm\fR transport, the \fIendpoint\fR shall be interpreted as an \fIinterface\fR followed by a semicolon, followed by a \fImulticast address\fR, followed by a colon and a port number\&.
64
+ .sp
65
+ An \fIinterface\fR may be specified by either of the following:
66
+ .sp
67
+ .RS 4
68
+ .ie n \{\
69
+ \h'-04'\(bu\h'+03'\c
70
+ .\}
71
+ .el \{\
72
+ .sp -1
73
+ .IP \(bu 2.3
74
+ .\}
75
+ The interface name as defined by the operating system\&.
76
+ .RE
77
+ .sp
78
+ .RS 4
79
+ .ie n \{\
80
+ \h'-04'\(bu\h'+03'\c
81
+ .\}
82
+ .el \{\
83
+ .sp -1
84
+ .IP \(bu 2.3
85
+ .\}
86
+ The primary IPv4 address assigned to the interface, in it\(cqs numeric representation\&.
87
+ .RE
88
+ .if n \{\
89
+ .sp
90
+ .\}
91
+ .RS 4
92
+ .it 1 an-trap
93
+ .nr an-no-space-flag 1
94
+ .nr an-break-flag 1
95
+ .br
96
+ .ps +1
97
+ \fBNote\fR
98
+ .ps -1
99
+ .br
100
+ .sp
101
+ Interface names are not standardised in any way and should be assumed to be arbitrary and platform dependent\&. On Win32 platforms no short interface names exist, thus only the primary IPv4 address may be used to specify an \fIinterface\fR\&.
102
+ .sp .5v
103
+ .RE
104
+ .sp
105
+ A \fImulticast address\fR is specified by an IPv4 multicast address in it\(cqs numeric representation\&.
106
+ .SH "WIRE FORMAT"
107
+ .sp
108
+ Consecutive PGM datagrams are interpreted by 0MQ as a single continuous stream of data where 0MQ messages are not necessarily aligned with PGM datagram boundaries and a single 0MQ message may span several PGM datagrams\&. This stream of data consists of 0MQ messages encapsulated in \fIframes\fR as described in \fBzmq_tcp\fR(7)\&.
109
+ .SS "PGM datagram payload"
110
+ .sp
111
+ The following ABNF grammar represents the payload of a single PGM datagram as used by 0MQ:
112
+ .sp
113
+ .if n \{\
114
+ .RS 4
115
+ .\}
116
+ .nf
117
+ datagram = (offset data)
118
+ offset = 2OCTET
119
+ data = *OCTET
120
+ .fi
121
+ .if n \{\
122
+ .RE
123
+ .\}
124
+ .sp
125
+ In order for late joining consumers to be able to identify message boundaries, each PGM datagram payload starts with a 16\-bit unsigned integer in network byte order specifying either the offset of the first message \fIframe\fR in the datagram or containing the value 0xFFFF if the datagram contains solely an intermediate part of a larger message\&.
126
+ .sp
127
+ Note that offset specifies where the first message begins rather than the first message part\&. Thus, if there are trailing message parts at the beginning of the packet the offset ignores them and points to first initial message part in the packet\&.
128
+ .sp
129
+ The following diagram illustrates the layout of a single PGM datagram payload:
130
+ .sp
131
+ .if n \{\
132
+ .RS 4
133
+ .\}
134
+ .nf
135
+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
136
+ | offset (16 bits) | data |
137
+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
138
+ .fi
139
+ .if n \{\
140
+ .RE
141
+ .\}
142
+ .sp
143
+ The following diagram further illustrates how three example 0MQ frames are laid out in consecutive PGM datagram payloads:
144
+ .sp
145
+ .if n \{\
146
+ .RS 4
147
+ .\}
148
+ .nf
149
+ First datagram payload
150
+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
151
+ | Frame offset | Frame 1 | Frame 2, part 1 |
152
+ | 0x0000 | (Message 1) | (Message 2, part 1) |
153
+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
154
+
155
+ Second datagram payload
156
+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
157
+ | Frame offset | Frame 2, part 2 |
158
+ | 0xFFFF | (Message 2, part 2) |
159
+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
160
+
161
+ Third datagram payload
162
+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-+
163
+ | Frame offset | Frame 2, final 8 bytes | Frame 3 |
164
+ | 0x0008 | (Message 2, final 8 bytes) | (Message 3) |
165
+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-+
166
+ .fi
167
+ .if n \{\
168
+ .RE
169
+ .\}
170
+ .SH "EXAMPLE"
171
+ .PP
172
+ \fBConnecting a socket\fR.
173
+ .sp
174
+ .if n \{\
175
+ .RS 4
176
+ .\}
177
+ .nf
178
+ /* Connecting to the multicast address 239\&.192\&.1\&.1, port 5555, */
179
+ /* using the first Ethernet network interface on Linux */
180
+ /* and the Encapsulated PGM protocol */
181
+ rc = zmq_connect(socket, "epgm://eth0;239\&.192\&.1\&.1:5555");
182
+ assert (rc == 0);
183
+ /* Connecting to the multicast address 239\&.192\&.1\&.1, port 5555, */
184
+ /* using the network interface with the address 192\&.168\&.1\&.1 */
185
+ /* and the standard PGM protocol */
186
+ rc = zmq_connect(socket, "pgm://192\&.168\&.1\&.1;239\&.192\&.1\&.1:5555");
187
+ assert (rc == 0);
188
+ .fi
189
+ .if n \{\
190
+ .RE
191
+ .\}
192
+ .sp
193
+ .SH "SEE ALSO"
194
+ .sp
195
+ \fBzmq_connect\fR(3) \fBzmq_setsockopt\fR(3) \fBzmq_tcp\fR(7) \fBzmq_ipc\fR(7) \fBzmq_inproc\fR(7) \fBzmq\fR(7)
196
+ .SH "AUTHORS"
197
+ .sp
198
+ This 0MQ manual page was written by Martin Sustrik <\m[blue]\fBsustrik@250bpm\&.com\fR\m[]\&\s-2\u[1]\d\s+2> and Martin Lucina <\m[blue]\fBmato@kotelna\&.sk\fR\m[]\&\s-2\u[2]\d\s+2>\&.
199
+ .SH "NOTES"
200
+ .IP " 1." 4
201
+ sustrik@250bpm.com
202
+ .RS 4
203
+ \%mailto:sustrik@250bpm.com
204
+ .RE
205
+ .IP " 2." 4
206
+ mato@kotelna.sk
207
+ .RS 4
208
+ \%mailto:mato@kotelna.sk
209
+ .RE
@@ -0,0 +1,749 @@
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_pgm(7)</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_pgm(7) Manual Page
574
+ </h1>
575
+ <h2>NAME</h2>
576
+ <div class="sectionbody">
577
+ <p>zmq_pgm -
578
+ 0MQ reliable multicast transport using PGM
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>PGM (Pragmatic General Multicast) is a protocol for reliable multicast
586
+ transport of data over IP networks.</p></div>
587
+ </div>
588
+ <h2 id="_description">DESCRIPTION</h2>
589
+ <div class="sectionbody">
590
+ <div class="paragraph"><p>ØMQ implements two variants of PGM, the standard protocol where PGM datagrams
591
+ are layered directly on top of IP datagrams as defined by RFC 3208 (the <em>pgm</em>
592
+ transport) and "Encapsulated PGM" where PGM datagrams are encapsulated inside
593
+ UDP datagrams (the <em>epgm</em> transport).</p></div>
594
+ <div class="paragraph"><p>The <em>pgm</em> and <em>epgm</em> transports can only be used with the <em>ZMQ_PUB</em> and
595
+ <em>ZMQ_SUB</em> socket types.</p></div>
596
+ <div class="paragraph"><p>Further, PGM sockets are rate limited by default and incur a performance
597
+ penalty when used over a loop-back interface. For details, refer to the
598
+ <em>ZMQ_RATE</em>, <em>ZMQ_RECOVERY_IVL</em> and <em>ZMQ_MCAST_LOOP</em> options documented in
599
+ <a href="zmq_setsockopt.html">zmq_setsockopt(3)</a>.</p></div>
600
+ <div class="admonitionblock">
601
+ <table><tr>
602
+ <td class="icon">
603
+ <div class="title">Caution</div>
604
+ </td>
605
+ <td class="content">The <em>pgm</em> transport implementation requires access to raw IP sockets.
606
+ Additional privileges may be required on some operating systems for this
607
+ operation. Applications not requiring direct interoperability with other PGM
608
+ implementations are encouraged to use the <em>epgm</em> transport instead which does
609
+ not require any special privileges.</td>
610
+ </tr></table>
611
+ </div>
612
+ </div>
613
+ <h2 id="_addressing">ADDRESSING</h2>
614
+ <div class="sectionbody">
615
+ <div class="paragraph"><p>A ØMQ address string consists of two parts as follows:
616
+ <em>transport</em><tt>://</tt><em>endpoint</em>. The <em>transport</em> part specifies the underlying
617
+ transport protocol to use. For the standard PGM protocol, <em>transport</em> shall be
618
+ set to <tt>pgm</tt>. For the "Encapsulated PGM" protocol <em>transport</em> shall be set to
619
+ <tt>epgm</tt>. The meaning of the <em>endpoint</em> part for both the <em>pgm</em> and <em>epgm</em>
620
+ transport is defined below.</p></div>
621
+ <h3 id="_connecting_a_socket">Connecting a socket</h3><div style="clear:left"></div>
622
+ <div class="paragraph"><p>When connecting a socket to a peer address using <em>zmq_connect()</em> with the <em>pgm</em>
623
+ or <em>epgm</em> transport, the <em>endpoint</em> shall be interpreted as an <em>interface</em>
624
+ followed by a semicolon, followed by a <em>multicast address</em>, followed by a colon
625
+ and a port number.</p></div>
626
+ <div class="paragraph"><p>An <em>interface</em> may be specified by either of the following:</p></div>
627
+ <div class="ulist"><ul>
628
+ <li>
629
+ <p>
630
+ The interface name as defined by the operating system.
631
+ </p>
632
+ </li>
633
+ <li>
634
+ <p>
635
+ The primary IPv4 address assigned to the interface, in it&#8217;s numeric
636
+ representation.
637
+ </p>
638
+ </li>
639
+ </ul></div>
640
+ <div class="admonitionblock">
641
+ <table><tr>
642
+ <td class="icon">
643
+ <div class="title">Note</div>
644
+ </td>
645
+ <td class="content">Interface names are not standardised in any way and should be assumed to
646
+ be arbitrary and platform dependent. On Win32 platforms no short interface
647
+ names exist, thus only the primary IPv4 address may be used to specify an
648
+ <em>interface</em>.</td>
649
+ </tr></table>
650
+ </div>
651
+ <div class="paragraph"><p>A <em>multicast address</em> is specified by an IPv4 multicast address in it&#8217;s numeric
652
+ representation.</p></div>
653
+ </div>
654
+ <h2 id="_wire_format">WIRE FORMAT</h2>
655
+ <div class="sectionbody">
656
+ <div class="paragraph"><p>Consecutive PGM datagrams are interpreted by ØMQ as a single continuous stream
657
+ of data where ØMQ messages are not necessarily aligned with PGM datagram
658
+ boundaries and a single ØMQ message may span several PGM datagrams. This stream
659
+ of data consists of ØMQ messages encapsulated in <em>frames</em> as described in
660
+ <a href="zmq_tcp.html">zmq_tcp(7)</a>.</p></div>
661
+ <h3 id="_pgm_datagram_payload">PGM datagram payload</h3><div style="clear:left"></div>
662
+ <div class="paragraph"><p>The following ABNF grammar represents the payload of a single PGM datagram as
663
+ used by ØMQ:</p></div>
664
+ <div class="literalblock">
665
+ <div class="content">
666
+ <pre><tt>datagram = (offset data)
667
+ offset = 2OCTET
668
+ data = *OCTET</tt></pre>
669
+ </div></div>
670
+ <div class="paragraph"><p>In order for late joining consumers to be able to identify message boundaries,
671
+ each PGM datagram payload starts with a 16-bit unsigned integer in network byte
672
+ order specifying either the offset of the first message <em>frame</em> in the datagram
673
+ or containing the value <tt>0xFFFF</tt> if the datagram contains solely an
674
+ intermediate part of a larger message.</p></div>
675
+ <div class="paragraph"><p>Note that offset specifies where the first message begins rather than the first
676
+ message part. Thus, if there are trailing message parts at the beginning of
677
+ the packet the offset ignores them and points to first initial message part
678
+ in the packet.</p></div>
679
+ <div class="paragraph"><p>The following diagram illustrates the layout of a single PGM datagram payload:</p></div>
680
+ <div class="literalblock">
681
+ <div class="content">
682
+ <pre><tt>+------------------+----------------------+
683
+ | offset (16 bits) | data |
684
+ +------------------+----------------------+</tt></pre>
685
+ </div></div>
686
+ <div class="paragraph"><p>The following diagram further illustrates how three example ØMQ frames are laid
687
+ out in consecutive PGM datagram payloads:</p></div>
688
+ <div class="literalblock">
689
+ <div class="content">
690
+ <pre><tt>First datagram payload
691
+ +--------------+-------------+---------------------+
692
+ | Frame offset | Frame 1 | Frame 2, part 1 |
693
+ | 0x0000 | (Message 1) | (Message 2, part 1) |
694
+ +--------------+-------------+---------------------+
695
+
696
+ Second datagram payload
697
+ +--------------+---------------------+
698
+ | Frame offset | Frame 2, part 2 |
699
+ | 0xFFFF | (Message 2, part 2) |
700
+ +--------------+---------------------+
701
+
702
+ Third datagram payload
703
+ +--------------+----------------------------+-------------+
704
+ | Frame offset | Frame 2, final 8 bytes | Frame 3 |
705
+ | 0x0008 | (Message 2, final 8 bytes) | (Message 3) |
706
+ +--------------+----------------------------+-------------+</tt></pre>
707
+ </div></div>
708
+ </div>
709
+ <h2 id="_example">EXAMPLE</h2>
710
+ <div class="sectionbody">
711
+ <div class="listingblock">
712
+ <div class="title">Connecting a socket</div>
713
+ <div class="content">
714
+ <pre><tt>/* Connecting to the multicast address 239.192.1.1, port 5555, */
715
+ /* using the first Ethernet network interface on Linux */
716
+ /* and the Encapsulated PGM protocol */
717
+ rc = zmq_connect(socket, "epgm://eth0;239.192.1.1:5555");
718
+ assert (rc == 0);
719
+ /* Connecting to the multicast address 239.192.1.1, port 5555, */
720
+ /* using the network interface with the address 192.168.1.1 */
721
+ /* and the standard PGM protocol */
722
+ rc = zmq_connect(socket, "pgm://192.168.1.1;239.192.1.1:5555");
723
+ assert (rc == 0);</tt></pre>
724
+ </div></div>
725
+ </div>
726
+ <h2 id="_see_also">SEE ALSO</h2>
727
+ <div class="sectionbody">
728
+ <div class="paragraph"><p><a href="zmq_connect.html">zmq_connect(3)</a>
729
+ <a href="zmq_setsockopt.html">zmq_setsockopt(3)</a>
730
+ <a href="zmq_tcp.html">zmq_tcp(7)</a>
731
+ <a href="zmq_ipc.html">zmq_ipc(7)</a>
732
+ <a href="zmq_inproc.html">zmq_inproc(7)</a>
733
+ <a href="zmq.html">zmq(7)</a></p></div>
734
+ </div>
735
+ <h2 id="_authors">AUTHORS</h2>
736
+ <div class="sectionbody">
737
+ <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
738
+ Martin Lucina &lt;<a href="mailto:mato@kotelna.sk">mato@kotelna.sk</a>&gt;.</p></div>
739
+ </div>
740
+ </div>
741
+ <div id="footnotes"><hr /></div>
742
+ <div id="footer">
743
+ <div id="footer-text">
744
+ ØMQ 2.1.5<br />
745
+ Last updated 2011-04-16 10:29:20 CEST
746
+ </div>
747
+ </div>
748
+ </body>
749
+ </html>