laag-libzmq 4.2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (792) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/LICENSE.txt +181 -0
  4. data/README.org +34 -0
  5. data/ext/laag/libzmq/extconf.rb +22 -0
  6. data/laag-libzmq.gemspec +21 -0
  7. data/lib/laag/libzmq.rb +31 -0
  8. data/vendor/github.com/zeromq/libzmq/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  9. data/vendor/github.com/zeromq/libzmq/.github/issue_template.md +22 -0
  10. data/vendor/github.com/zeromq/libzmq/.gitignore +180 -0
  11. data/vendor/github.com/zeromq/libzmq/.hgeol +2 -0
  12. data/vendor/github.com/zeromq/libzmq/.mailmap +81 -0
  13. data/vendor/github.com/zeromq/libzmq/.travis.yml +115 -0
  14. data/vendor/github.com/zeromq/libzmq/AUTHORS +151 -0
  15. data/vendor/github.com/zeromq/libzmq/CMakeLists.txt +1104 -0
  16. data/vendor/github.com/zeromq/libzmq/COPYING +674 -0
  17. data/vendor/github.com/zeromq/libzmq/COPYING.LESSER +181 -0
  18. data/vendor/github.com/zeromq/libzmq/Dockerfile +11 -0
  19. data/vendor/github.com/zeromq/libzmq/Doxygen.cfg +2320 -0
  20. data/vendor/github.com/zeromq/libzmq/FindSodium.cmake +40 -0
  21. data/vendor/github.com/zeromq/libzmq/INSTALL +311 -0
  22. data/vendor/github.com/zeromq/libzmq/Jenkinsfile +369 -0
  23. data/vendor/github.com/zeromq/libzmq/Makefile.am +908 -0
  24. data/vendor/github.com/zeromq/libzmq/NEWS +1582 -0
  25. data/vendor/github.com/zeromq/libzmq/README.cygwin.md +15 -0
  26. data/vendor/github.com/zeromq/libzmq/README.doxygen.md +48 -0
  27. data/vendor/github.com/zeromq/libzmq/README.md +102 -0
  28. data/vendor/github.com/zeromq/libzmq/RELICENSE/AndreLouisCaron.md +15 -0
  29. data/vendor/github.com/zeromq/libzmq/RELICENSE/Asmod4n.md +13 -0
  30. data/vendor/github.com/zeromq/libzmq/RELICENSE/BerndPrager.md +13 -0
  31. data/vendor/github.com/zeromq/libzmq/RELICENSE/Bklyn.md +15 -0
  32. data/vendor/github.com/zeromq/libzmq/RELICENSE/BrianBuchanan.md +15 -0
  33. data/vendor/github.com/zeromq/libzmq/RELICENSE/ChuckRemes.md +15 -0
  34. data/vendor/github.com/zeromq/libzmq/RELICENSE/FrancoFichtner.md +15 -0
  35. data/vendor/github.com/zeromq/libzmq/RELICENSE/GavinMcNiff.md +15 -0
  36. data/vendor/github.com/zeromq/libzmq/RELICENSE/GhislainPutois.md +15 -0
  37. data/vendor/github.com/zeromq/libzmq/RELICENSE/GiuseppeCorbelli.md +15 -0
  38. data/vendor/github.com/zeromq/libzmq/RELICENSE/HaraldAchitz.md +17 -0
  39. data/vendor/github.com/zeromq/libzmq/RELICENSE/Hugne.md +17 -0
  40. data/vendor/github.com/zeromq/libzmq/RELICENSE/JimHague.md +16 -0
  41. data/vendor/github.com/zeromq/libzmq/RELICENSE/JohanMabille.md +16 -0
  42. data/vendor/github.com/zeromq/libzmq/RELICENSE/LeonardMichelet +14 -0
  43. data/vendor/github.com/zeromq/libzmq/RELICENSE/LeonardoConsoni.md +15 -0
  44. data/vendor/github.com/zeromq/libzmq/RELICENSE/LionelOrry.md +15 -0
  45. data/vendor/github.com/zeromq/libzmq/RELICENSE/OsirisPedroso.md +15 -0
  46. data/vendor/github.com/zeromq/libzmq/RELICENSE/README.md +23 -0
  47. data/vendor/github.com/zeromq/libzmq/RELICENSE/RobGagnon.md +13 -0
  48. data/vendor/github.com/zeromq/libzmq/RELICENSE/SebastienRombauts.md +15 -0
  49. data/vendor/github.com/zeromq/libzmq/RELICENSE/StoianIvanov.md +15 -0
  50. data/vendor/github.com/zeromq/libzmq/RELICENSE/SylvainCorlay.md +16 -0
  51. data/vendor/github.com/zeromq/libzmq/RELICENSE/TimotheeBesset.md +15 -0
  52. data/vendor/github.com/zeromq/libzmq/RELICENSE/VincentTellier.md +15 -0
  53. data/vendor/github.com/zeromq/libzmq/RELICENSE/VolodymyrKorniichuk.md +15 -0
  54. data/vendor/github.com/zeromq/libzmq/RELICENSE/abbradar.md +16 -0
  55. data/vendor/github.com/zeromq/libzmq/RELICENSE/agronholm.md +15 -0
  56. data/vendor/github.com/zeromq/libzmq/RELICENSE/amuraru.md +15 -0
  57. data/vendor/github.com/zeromq/libzmq/RELICENSE/arsenm.md +15 -0
  58. data/vendor/github.com/zeromq/libzmq/RELICENSE/aseering.md +15 -0
  59. data/vendor/github.com/zeromq/libzmq/RELICENSE/bjorntopel.md +16 -0
  60. data/vendor/github.com/zeromq/libzmq/RELICENSE/bjovke.md +16 -0
  61. data/vendor/github.com/zeromq/libzmq/RELICENSE/brocade_communications_systems.md +15 -0
  62. data/vendor/github.com/zeromq/libzmq/RELICENSE/brunobodin.md +13 -0
  63. data/vendor/github.com/zeromq/libzmq/RELICENSE/c-rack.md +15 -0
  64. data/vendor/github.com/zeromq/libzmq/RELICENSE/camachat.md +15 -0
  65. data/vendor/github.com/zeromq/libzmq/RELICENSE/cdolan.md +15 -0
  66. data/vendor/github.com/zeromq/libzmq/RELICENSE/chrisstaite.md +14 -0
  67. data/vendor/github.com/zeromq/libzmq/RELICENSE/chugga_fan.md +15 -0
  68. data/vendor/github.com/zeromq/libzmq/RELICENSE/cjuniet.md +15 -0
  69. data/vendor/github.com/zeromq/libzmq/RELICENSE/ckamm.md +15 -0
  70. data/vendor/github.com/zeromq/libzmq/RELICENSE/clkao.md +15 -0
  71. data/vendor/github.com/zeromq/libzmq/RELICENSE/danielhtshih.md +15 -0
  72. data/vendor/github.com/zeromq/libzmq/RELICENSE/danriegsecker.md +16 -0
  73. data/vendor/github.com/zeromq/libzmq/RELICENSE/dfons.md +16 -0
  74. data/vendor/github.com/zeromq/libzmq/RELICENSE/djelenc.md +15 -0
  75. data/vendor/github.com/zeromq/libzmq/RELICENSE/drodri.md +15 -0
  76. data/vendor/github.com/zeromq/libzmq/RELICENSE/eburkitt.md +15 -0
  77. data/vendor/github.com/zeromq/libzmq/RELICENSE/egomotion.md +16 -0
  78. data/vendor/github.com/zeromq/libzmq/RELICENSE/evoskuil.md +15 -0
  79. data/vendor/github.com/zeromq/libzmq/RELICENSE/febeling.md +16 -0
  80. data/vendor/github.com/zeromq/libzmq/RELICENSE/fidlej.md +15 -0
  81. data/vendor/github.com/zeromq/libzmq/RELICENSE/flub.md +14 -0
  82. data/vendor/github.com/zeromq/libzmq/RELICENSE/gena-moscow.md +15 -0
  83. data/vendor/github.com/zeromq/libzmq/RELICENSE/gonzus.md +15 -0
  84. data/vendor/github.com/zeromq/libzmq/RELICENSE/goodfella_ltd.md +13 -0
  85. data/vendor/github.com/zeromq/libzmq/RELICENSE/google.md +13 -0
  86. data/vendor/github.com/zeromq/libzmq/RELICENSE/ianbarber.md +15 -0
  87. data/vendor/github.com/zeromq/libzmq/RELICENSE/imatix.md +23 -0
  88. data/vendor/github.com/zeromq/libzmq/RELICENSE/jakecobb.md +13 -0
  89. data/vendor/github.com/zeromq/libzmq/RELICENSE/jemc.md +15 -0
  90. data/vendor/github.com/zeromq/libzmq/RELICENSE/jimklimov.md +17 -0
  91. data/vendor/github.com/zeromq/libzmq/RELICENSE/jkryl.md +15 -0
  92. data/vendor/github.com/zeromq/libzmq/RELICENSE/johntconklin.md +15 -0
  93. data/vendor/github.com/zeromq/libzmq/RELICENSE/jruffin.md +14 -0
  94. data/vendor/github.com/zeromq/libzmq/RELICENSE/kentzo.md +15 -0
  95. data/vendor/github.com/zeromq/libzmq/RELICENSE/kevinsapper.md +13 -0
  96. data/vendor/github.com/zeromq/libzmq/RELICENSE/kobolog.md +12 -0
  97. data/vendor/github.com/zeromq/libzmq/RELICENSE/kurdybacha.md +15 -0
  98. data/vendor/github.com/zeromq/libzmq/RELICENSE/linville.md +15 -0
  99. data/vendor/github.com/zeromq/libzmq/RELICENSE/loachfish.md +15 -0
  100. data/vendor/github.com/zeromq/libzmq/RELICENSE/lodagro.md +15 -0
  101. data/vendor/github.com/zeromq/libzmq/RELICENSE/madebr.md +15 -0
  102. data/vendor/github.com/zeromq/libzmq/RELICENSE/mattconnolly.md +15 -0
  103. data/vendor/github.com/zeromq/libzmq/RELICENSE/mauri-melato.md +13 -0
  104. data/vendor/github.com/zeromq/libzmq/RELICENSE/mditzel.md +15 -0
  105. data/vendor/github.com/zeromq/libzmq/RELICENSE/meox.md +15 -0
  106. data/vendor/github.com/zeromq/libzmq/RELICENSE/michael-fox.md +16 -0
  107. data/vendor/github.com/zeromq/libzmq/RELICENSE/michicc.md +15 -0
  108. data/vendor/github.com/zeromq/libzmq/RELICENSE/minrk.md +15 -0
  109. data/vendor/github.com/zeromq/libzmq/RELICENSE/mipaaa.md +15 -0
  110. data/vendor/github.com/zeromq/libzmq/RELICENSE/mkluwe.md +15 -0
  111. data/vendor/github.com/zeromq/libzmq/RELICENSE/montoyaedu.md +15 -0
  112. data/vendor/github.com/zeromq/libzmq/RELICENSE/naos_ltd.md +19 -0
  113. data/vendor/github.com/zeromq/libzmq/RELICENSE/natano.md +15 -0
  114. data/vendor/github.com/zeromq/libzmq/RELICENSE/olafmandel.md +13 -0
  115. data/vendor/github.com/zeromq/libzmq/RELICENSE/pijyoi.md +13 -0
  116. data/vendor/github.com/zeromq/libzmq/RELICENSE/ptroja.md +14 -0
  117. data/vendor/github.com/zeromq/libzmq/RELICENSE/reunanen.md +15 -0
  118. data/vendor/github.com/zeromq/libzmq/RELICENSE/reza-ebrahimi.md +15 -0
  119. data/vendor/github.com/zeromq/libzmq/RELICENSE/rikvdh.md +15 -0
  120. data/vendor/github.com/zeromq/libzmq/RELICENSE/rlenferink.md +15 -0
  121. data/vendor/github.com/zeromq/libzmq/RELICENSE/roalz.md +13 -0
  122. data/vendor/github.com/zeromq/libzmq/RELICENSE/rodgert.md +17 -0
  123. data/vendor/github.com/zeromq/libzmq/RELICENSE/rotty.md +16 -0
  124. data/vendor/github.com/zeromq/libzmq/RELICENSE/sabae.md +15 -0
  125. data/vendor/github.com/zeromq/libzmq/RELICENSE/scemama.md +15 -0
  126. data/vendor/github.com/zeromq/libzmq/RELICENSE/sheremetyev.md +13 -0
  127. data/vendor/github.com/zeromq/libzmq/RELICENSE/shripchenko.md +15 -0
  128. data/vendor/github.com/zeromq/libzmq/RELICENSE/sigiesec.md +17 -0
  129. data/vendor/github.com/zeromq/libzmq/RELICENSE/soulik.md +15 -0
  130. data/vendor/github.com/zeromq/libzmq/RELICENSE/swansontec.md +15 -0
  131. data/vendor/github.com/zeromq/libzmq/RELICENSE/t-b.md +15 -0
  132. data/vendor/github.com/zeromq/libzmq/RELICENSE/tSed.md +15 -0
  133. data/vendor/github.com/zeromq/libzmq/RELICENSE/tabe.md +15 -0
  134. data/vendor/github.com/zeromq/libzmq/RELICENSE/tailhook.md +16 -0
  135. data/vendor/github.com/zeromq/libzmq/RELICENSE/taotetek.md +13 -0
  136. data/vendor/github.com/zeromq/libzmq/RELICENSE/templates/relicense-template-mplv2-any-osi.txt +15 -0
  137. data/vendor/github.com/zeromq/libzmq/RELICENSE/templates/relicense-template-mplv2-share-alike-osi.txt +15 -0
  138. data/vendor/github.com/zeromq/libzmq/RELICENSE/templates/relicense-template-mplv2.txt +13 -0
  139. data/vendor/github.com/zeromq/libzmq/RELICENSE/thompsa.md +15 -0
  140. data/vendor/github.com/zeromq/libzmq/RELICENSE/torehalvorsen.md +15 -0
  141. data/vendor/github.com/zeromq/libzmq/RELICENSE/twhittock.md +15 -0
  142. data/vendor/github.com/zeromq/libzmq/RELICENSE/ulikoehler.md +16 -0
  143. data/vendor/github.com/zeromq/libzmq/RELICENSE/vyskocilm.md +7 -0
  144. data/vendor/github.com/zeromq/libzmq/RELICENSE/willstrang.md +15 -0
  145. data/vendor/github.com/zeromq/libzmq/RELICENSE/xaqq.md +13 -0
  146. data/vendor/github.com/zeromq/libzmq/RELICENSE/yuvallanger.md +15 -0
  147. data/vendor/github.com/zeromq/libzmq/ZeroMQConfig.cmake.in +25 -0
  148. data/vendor/github.com/zeromq/libzmq/acinclude.m4 +1122 -0
  149. data/vendor/github.com/zeromq/libzmq/appveyor.yml +97 -0
  150. data/vendor/github.com/zeromq/libzmq/autogen.sh +49 -0
  151. data/vendor/github.com/zeromq/libzmq/branding.bmp +0 -0
  152. data/vendor/github.com/zeromq/libzmq/builds/Makefile.am +31 -0
  153. data/vendor/github.com/zeromq/libzmq/builds/README +4 -0
  154. data/vendor/github.com/zeromq/libzmq/builds/android/Dockerfile +22 -0
  155. data/vendor/github.com/zeromq/libzmq/builds/android/README.md +78 -0
  156. data/vendor/github.com/zeromq/libzmq/builds/android/android_build_helper.sh +316 -0
  157. data/vendor/github.com/zeromq/libzmq/builds/android/build.sh +70 -0
  158. data/vendor/github.com/zeromq/libzmq/builds/android/ci_build.sh +30 -0
  159. data/vendor/github.com/zeromq/libzmq/builds/cmake/Modules/FindAsciiDoc.cmake +26 -0
  160. data/vendor/github.com/zeromq/libzmq/builds/cmake/Modules/TestZMQVersion.cmake +8 -0
  161. data/vendor/github.com/zeromq/libzmq/builds/cmake/Modules/ZMQSourceRunChecks.cmake +301 -0
  162. data/vendor/github.com/zeromq/libzmq/builds/cmake/NSIS.template32.in +952 -0
  163. data/vendor/github.com/zeromq/libzmq/builds/cmake/NSIS.template64.in +960 -0
  164. data/vendor/github.com/zeromq/libzmq/builds/cmake/ci_build.sh +34 -0
  165. data/vendor/github.com/zeromq/libzmq/builds/cmake/platform.hpp.in +104 -0
  166. data/vendor/github.com/zeromq/libzmq/builds/coverage/ci_build.sh +32 -0
  167. data/vendor/github.com/zeromq/libzmq/builds/cygwin/Makefile.cygwin +48 -0
  168. data/vendor/github.com/zeromq/libzmq/builds/gyp/.gitignore +5 -0
  169. data/vendor/github.com/zeromq/libzmq/builds/gyp/build.bat +4 -0
  170. data/vendor/github.com/zeromq/libzmq/builds/gyp/platform.hpp +80 -0
  171. data/vendor/github.com/zeromq/libzmq/builds/gyp/project-tests.gsl +19 -0
  172. data/vendor/github.com/zeromq/libzmq/builds/gyp/project-tests.gypi +895 -0
  173. data/vendor/github.com/zeromq/libzmq/builds/gyp/project-tests.xml +83 -0
  174. data/vendor/github.com/zeromq/libzmq/builds/gyp/project.gyp +295 -0
  175. data/vendor/github.com/zeromq/libzmq/builds/mingw32/Makefile.mingw32 +49 -0
  176. data/vendor/github.com/zeromq/libzmq/builds/mingw32/platform.hpp +43 -0
  177. data/vendor/github.com/zeromq/libzmq/builds/msvc/.gitignore +256 -0
  178. data/vendor/github.com/zeromq/libzmq/builds/msvc/Makefile.am +94 -0
  179. data/vendor/github.com/zeromq/libzmq/builds/msvc/build/build.bat +33 -0
  180. data/vendor/github.com/zeromq/libzmq/builds/msvc/build/buildall.bat +16 -0
  181. data/vendor/github.com/zeromq/libzmq/builds/msvc/build/buildbase.bat +73 -0
  182. data/vendor/github.com/zeromq/libzmq/builds/msvc/errno.cpp +32 -0
  183. data/vendor/github.com/zeromq/libzmq/builds/msvc/errno.hpp +56 -0
  184. data/vendor/github.com/zeromq/libzmq/builds/msvc/platform.hpp +14 -0
  185. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/Common.props +21 -0
  186. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/DLL.props +16 -0
  187. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/Debug.props +29 -0
  188. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/DebugDEXE.props +21 -0
  189. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/DebugDLL.props +20 -0
  190. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/DebugLEXE.props +20 -0
  191. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/DebugLIB.props +21 -0
  192. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/DebugLTCG.props +20 -0
  193. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/DebugSEXE.props +21 -0
  194. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/EXE.props +17 -0
  195. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/LIB.props +16 -0
  196. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/LTCG.props +13 -0
  197. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/Link.props +21 -0
  198. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/Messages.props +15 -0
  199. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/Output.props +30 -0
  200. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/Release.props +41 -0
  201. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/ReleaseDEXE.props +20 -0
  202. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/ReleaseDLL.props +19 -0
  203. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/ReleaseLEXE.props +20 -0
  204. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/ReleaseLIB.props +19 -0
  205. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/ReleaseLTCG.props +19 -0
  206. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/ReleaseSEXE.props +20 -0
  207. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/Win32.props +20 -0
  208. data/vendor/github.com/zeromq/libzmq/builds/msvc/properties/x64.props +23 -0
  209. data/vendor/github.com/zeromq/libzmq/builds/msvc/readme.txt +27 -0
  210. data/vendor/github.com/zeromq/libzmq/builds/msvc/resource.h +14 -0
  211. data/vendor/github.com/zeromq/libzmq/builds/msvc/resource.rc +0 -0
  212. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2008/inproc_lat/inproc_lat.vcproj +52 -0
  213. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2008/inproc_thr/inproc_thr.vcproj +52 -0
  214. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2008/libzmq.sln +95 -0
  215. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2008/libzmq/libzmq.vcproj +338 -0
  216. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2008/local_lat/local_lat.vcproj +52 -0
  217. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2008/local_thr/local_thr.vcproj +52 -0
  218. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2008/remote_lat/remote_lat.vcproj +52 -0
  219. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2008/remote_thr/remote_thr.vcproj +52 -0
  220. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/inproc_lat/inproc_lat.props +49 -0
  221. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/inproc_lat/inproc_lat.vcxproj +82 -0
  222. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/inproc_thr/inproc_thr.props +49 -0
  223. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/inproc_thr/inproc_thr.vcxproj +82 -0
  224. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libsodium.import.props +52 -0
  225. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libsodium.import.xml +17 -0
  226. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libzmq.import.props +64 -0
  227. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libzmq.import.xml +49 -0
  228. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libzmq.sln +206 -0
  229. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libzmq/libzmq.props +76 -0
  230. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libzmq/libzmq.vcxproj +289 -0
  231. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libzmq/libzmq.vcxproj.filters +627 -0
  232. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/libzmq/libzmq.xml +40 -0
  233. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/local_lat/local_lat.props +49 -0
  234. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/local_lat/local_lat.vcxproj +82 -0
  235. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/local_thr/local_thr.props +49 -0
  236. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/local_thr/local_thr.vcxproj +82 -0
  237. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/remote_lat/remote_lat.props +49 -0
  238. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/remote_lat/remote_lat.vcxproj +82 -0
  239. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/remote_thr/remote_thr.props +49 -0
  240. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2010/remote_thr/remote_thr.vcxproj +82 -0
  241. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/inproc_lat/inproc_lat.props +49 -0
  242. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/inproc_lat/inproc_lat.vcxproj +82 -0
  243. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/inproc_thr/inproc_thr.props +49 -0
  244. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/inproc_thr/inproc_thr.vcxproj +82 -0
  245. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libsodium.import.props +52 -0
  246. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libsodium.import.xml +17 -0
  247. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libzmq.import.props +64 -0
  248. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libzmq.import.xml +49 -0
  249. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libzmq.sln +206 -0
  250. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libzmq/libzmq.props +76 -0
  251. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libzmq/libzmq.vcxproj +289 -0
  252. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libzmq/libzmq.vcxproj.filters +627 -0
  253. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/libzmq/libzmq.xml +40 -0
  254. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/local_lat/local_lat.props +49 -0
  255. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/local_lat/local_lat.vcxproj +82 -0
  256. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/local_thr/local_thr.props +49 -0
  257. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/local_thr/local_thr.vcxproj +82 -0
  258. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/remote_lat/remote_lat.props +49 -0
  259. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/remote_lat/remote_lat.vcxproj +82 -0
  260. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/remote_thr/remote_thr.props +49 -0
  261. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2012/remote_thr/remote_thr.vcxproj +82 -0
  262. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/inproc_lat/inproc_lat.props +49 -0
  263. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/inproc_lat/inproc_lat.vcxproj +82 -0
  264. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/inproc_thr/inproc_thr.props +49 -0
  265. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/inproc_thr/inproc_thr.vcxproj +82 -0
  266. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libsodium.import.props +52 -0
  267. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libsodium.import.xml +17 -0
  268. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libzmq.import.props +64 -0
  269. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libzmq.import.xml +49 -0
  270. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libzmq.sln +208 -0
  271. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libzmq/libzmq.props +76 -0
  272. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libzmq/libzmq.vcxproj +289 -0
  273. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libzmq/libzmq.vcxproj.filters +627 -0
  274. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/libzmq/libzmq.xml +40 -0
  275. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/local_lat/local_lat.props +49 -0
  276. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/local_lat/local_lat.vcxproj +82 -0
  277. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/local_thr/local_thr.props +49 -0
  278. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/local_thr/local_thr.vcxproj +82 -0
  279. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/remote_lat/remote_lat.props +49 -0
  280. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/remote_lat/remote_lat.vcxproj +82 -0
  281. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/remote_thr/remote_thr.props +49 -0
  282. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2013/remote_thr/remote_thr.vcxproj +82 -0
  283. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/inproc_lat/inproc_lat.props +49 -0
  284. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/inproc_lat/inproc_lat.vcxproj +82 -0
  285. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/inproc_thr/inproc_thr.props +49 -0
  286. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/inproc_thr/inproc_thr.vcxproj +82 -0
  287. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libsodium.import.props +52 -0
  288. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libsodium.import.xml +17 -0
  289. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libzmq.import.props +64 -0
  290. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libzmq.import.xml +49 -0
  291. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libzmq.sln +208 -0
  292. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libzmq/libzmq.props +76 -0
  293. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libzmq/libzmq.vcxproj +289 -0
  294. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libzmq/libzmq.vcxproj.filters +627 -0
  295. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/libzmq/libzmq.xml +40 -0
  296. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/local_lat/local_lat.props +49 -0
  297. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/local_lat/local_lat.vcxproj +82 -0
  298. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/local_thr/local_thr.props +49 -0
  299. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/local_thr/local_thr.vcxproj +82 -0
  300. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/remote_lat/remote_lat.props +49 -0
  301. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/remote_lat/remote_lat.vcxproj +82 -0
  302. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/remote_thr/remote_thr.props +49 -0
  303. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015/remote_thr/remote_thr.vcxproj +82 -0
  304. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015_xp/libzmq.vcxproj +258 -0
  305. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015_xp/platform.hpp +15 -0
  306. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015_xp/test_zmq/test_multithread.cpp +229 -0
  307. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2015_xp/test_zmq/test_zmq.vcxproj +155 -0
  308. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/inproc_lat/inproc_lat.props +49 -0
  309. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/inproc_lat/inproc_lat.vcxproj +82 -0
  310. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/inproc_thr/inproc_thr.props +49 -0
  311. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/inproc_thr/inproc_thr.vcxproj +82 -0
  312. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libsodium.import.props +52 -0
  313. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libsodium.import.xml +17 -0
  314. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libzmq.import.props +64 -0
  315. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libzmq.import.xml +49 -0
  316. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libzmq.sln +208 -0
  317. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libzmq/libzmq.props +76 -0
  318. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libzmq/libzmq.vcxproj +289 -0
  319. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libzmq/libzmq.vcxproj.filters +627 -0
  320. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/libzmq/libzmq.xml +40 -0
  321. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/local_lat/local_lat.props +49 -0
  322. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/local_lat/local_lat.vcxproj +82 -0
  323. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/local_thr/local_thr.props +49 -0
  324. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/local_thr/local_thr.vcxproj +82 -0
  325. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/remote_lat/remote_lat.props +49 -0
  326. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/remote_lat/remote_lat.vcxproj +82 -0
  327. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/remote_thr/remote_thr.props +49 -0
  328. data/vendor/github.com/zeromq/libzmq/builds/msvc/vs2017/remote_thr/remote_thr.vcxproj +82 -0
  329. data/vendor/github.com/zeromq/libzmq/builds/nuget/libzmq.autopkg +52 -0
  330. data/vendor/github.com/zeromq/libzmq/builds/nuget/readme.nuget +20 -0
  331. data/vendor/github.com/zeromq/libzmq/builds/openwrt/Makefile +70 -0
  332. data/vendor/github.com/zeromq/libzmq/builds/valgrind/ci_build.sh +30 -0
  333. data/vendor/github.com/zeromq/libzmq/builds/valgrind/valgrind.supp +22 -0
  334. data/vendor/github.com/zeromq/libzmq/builds/valgrind/vg +1 -0
  335. data/vendor/github.com/zeromq/libzmq/builds/zos/README.md +463 -0
  336. data/vendor/github.com/zeromq/libzmq/builds/zos/cxxall +62 -0
  337. data/vendor/github.com/zeromq/libzmq/builds/zos/makeclean +36 -0
  338. data/vendor/github.com/zeromq/libzmq/builds/zos/makelibzmq +54 -0
  339. data/vendor/github.com/zeromq/libzmq/builds/zos/maketests +102 -0
  340. data/vendor/github.com/zeromq/libzmq/builds/zos/platform.hpp +300 -0
  341. data/vendor/github.com/zeromq/libzmq/builds/zos/runtests +188 -0
  342. data/vendor/github.com/zeromq/libzmq/builds/zos/test_fork.cpp +95 -0
  343. data/vendor/github.com/zeromq/libzmq/builds/zos/zc++ +42 -0
  344. data/vendor/github.com/zeromq/libzmq/ci_build.sh +66 -0
  345. data/vendor/github.com/zeromq/libzmq/ci_deploy.sh +34 -0
  346. data/vendor/github.com/zeromq/libzmq/configure.ac +827 -0
  347. data/vendor/github.com/zeromq/libzmq/doc/Makefile.am +64 -0
  348. data/vendor/github.com/zeromq/libzmq/doc/asciidoc.conf +56 -0
  349. data/vendor/github.com/zeromq/libzmq/doc/zmq.txt +276 -0
  350. data/vendor/github.com/zeromq/libzmq/doc/zmq_atomic_counter_dec.txt +62 -0
  351. data/vendor/github.com/zeromq/libzmq/doc/zmq_atomic_counter_destroy.txt +62 -0
  352. data/vendor/github.com/zeromq/libzmq/doc/zmq_atomic_counter_inc.txt +61 -0
  353. data/vendor/github.com/zeromq/libzmq/doc/zmq_atomic_counter_new.txt +62 -0
  354. data/vendor/github.com/zeromq/libzmq/doc/zmq_atomic_counter_set.txt +61 -0
  355. data/vendor/github.com/zeromq/libzmq/doc/zmq_atomic_counter_value.txt +62 -0
  356. data/vendor/github.com/zeromq/libzmq/doc/zmq_bind.txt +103 -0
  357. data/vendor/github.com/zeromq/libzmq/doc/zmq_close.txt +56 -0
  358. data/vendor/github.com/zeromq/libzmq/doc/zmq_connect.txt +101 -0
  359. data/vendor/github.com/zeromq/libzmq/doc/zmq_ctx_destroy.txt +67 -0
  360. data/vendor/github.com/zeromq/libzmq/doc/zmq_ctx_get.txt +105 -0
  361. data/vendor/github.com/zeromq/libzmq/doc/zmq_ctx_new.txt +50 -0
  362. data/vendor/github.com/zeromq/libzmq/doc/zmq_ctx_set.txt +184 -0
  363. data/vendor/github.com/zeromq/libzmq/doc/zmq_ctx_shutdown.txt +52 -0
  364. data/vendor/github.com/zeromq/libzmq/doc/zmq_ctx_term.txt +68 -0
  365. data/vendor/github.com/zeromq/libzmq/doc/zmq_curve.txt +92 -0
  366. data/vendor/github.com/zeromq/libzmq/doc/zmq_curve_keypair.txt +56 -0
  367. data/vendor/github.com/zeromq/libzmq/doc/zmq_curve_public.txt +62 -0
  368. data/vendor/github.com/zeromq/libzmq/doc/zmq_disconnect.txt +75 -0
  369. data/vendor/github.com/zeromq/libzmq/doc/zmq_errno.txt +50 -0
  370. data/vendor/github.com/zeromq/libzmq/doc/zmq_getsockopt.txt +944 -0
  371. data/vendor/github.com/zeromq/libzmq/doc/zmq_gssapi.txt +78 -0
  372. data/vendor/github.com/zeromq/libzmq/doc/zmq_has.txt +44 -0
  373. data/vendor/github.com/zeromq/libzmq/doc/zmq_init.txt +52 -0
  374. data/vendor/github.com/zeromq/libzmq/doc/zmq_inproc.txt +88 -0
  375. data/vendor/github.com/zeromq/libzmq/doc/zmq_ipc.txt +106 -0
  376. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_close.txt +56 -0
  377. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_copy.txt +72 -0
  378. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_data.txt +48 -0
  379. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_get.txt +83 -0
  380. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_gets.txt +81 -0
  381. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_init.txt +64 -0
  382. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_init_data.txt +89 -0
  383. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_init_size.txt +58 -0
  384. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_more.txt +65 -0
  385. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_move.txt +52 -0
  386. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_recv.txt +124 -0
  387. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_routing_id.txt +61 -0
  388. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_send.txt +127 -0
  389. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_set.txt +46 -0
  390. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_set_routing_id.txt +46 -0
  391. data/vendor/github.com/zeromq/libzmq/doc/zmq_msg_size.txt +48 -0
  392. data/vendor/github.com/zeromq/libzmq/doc/zmq_null.txt +27 -0
  393. data/vendor/github.com/zeromq/libzmq/doc/zmq_pgm.txt +164 -0
  394. data/vendor/github.com/zeromq/libzmq/doc/zmq_plain.txt +37 -0
  395. data/vendor/github.com/zeromq/libzmq/doc/zmq_poll.txt +135 -0
  396. data/vendor/github.com/zeromq/libzmq/doc/zmq_proxy.txt +99 -0
  397. data/vendor/github.com/zeromq/libzmq/doc/zmq_proxy_steerable.txt +111 -0
  398. data/vendor/github.com/zeromq/libzmq/doc/zmq_recv.txt +91 -0
  399. data/vendor/github.com/zeromq/libzmq/doc/zmq_recvmsg.txt +121 -0
  400. data/vendor/github.com/zeromq/libzmq/doc/zmq_send.txt +104 -0
  401. data/vendor/github.com/zeromq/libzmq/doc/zmq_send_const.txt +103 -0
  402. data/vendor/github.com/zeromq/libzmq/doc/zmq_sendmsg.txt +121 -0
  403. data/vendor/github.com/zeromq/libzmq/doc/zmq_setsockopt.txt +1318 -0
  404. data/vendor/github.com/zeromq/libzmq/doc/zmq_socket.txt +609 -0
  405. data/vendor/github.com/zeromq/libzmq/doc/zmq_socket_monitor.txt +294 -0
  406. data/vendor/github.com/zeromq/libzmq/doc/zmq_strerror.txt +56 -0
  407. data/vendor/github.com/zeromq/libzmq/doc/zmq_tcp.txt +118 -0
  408. data/vendor/github.com/zeromq/libzmq/doc/zmq_term.txt +66 -0
  409. data/vendor/github.com/zeromq/libzmq/doc/zmq_tipc.txt +83 -0
  410. data/vendor/github.com/zeromq/libzmq/doc/zmq_udp.txt +99 -0
  411. data/vendor/github.com/zeromq/libzmq/doc/zmq_unbind.txt +90 -0
  412. data/vendor/github.com/zeromq/libzmq/doc/zmq_version.txt +54 -0
  413. data/vendor/github.com/zeromq/libzmq/doc/zmq_vmci.txt +97 -0
  414. data/vendor/github.com/zeromq/libzmq/doc/zmq_z85_decode.txt +51 -0
  415. data/vendor/github.com/zeromq/libzmq/doc/zmq_z85_encode.txt +58 -0
  416. data/vendor/github.com/zeromq/libzmq/include/zmq.h +708 -0
  417. data/vendor/github.com/zeromq/libzmq/include/zmq_utils.h +48 -0
  418. data/vendor/github.com/zeromq/libzmq/installer.ico +0 -0
  419. data/vendor/github.com/zeromq/libzmq/m4/ax_check_compile_flag.m4 +74 -0
  420. data/vendor/github.com/zeromq/libzmq/m4/ax_code_coverage.m4 +264 -0
  421. data/vendor/github.com/zeromq/libzmq/m4/ax_cxx_compile_stdcxx.m4 +562 -0
  422. data/vendor/github.com/zeromq/libzmq/m4/ax_cxx_compile_stdcxx_11.m4 +40 -0
  423. data/vendor/github.com/zeromq/libzmq/m4/ax_valgrind_check.m4 +233 -0
  424. data/vendor/github.com/zeromq/libzmq/packaging/README +4 -0
  425. data/vendor/github.com/zeromq/libzmq/packaging/debian/changelog +5 -0
  426. data/vendor/github.com/zeromq/libzmq/packaging/debian/compat +1 -0
  427. data/vendor/github.com/zeromq/libzmq/packaging/debian/control +64 -0
  428. data/vendor/github.com/zeromq/libzmq/packaging/debian/copyright +93 -0
  429. data/vendor/github.com/zeromq/libzmq/packaging/debian/libzmq3-dev.install +4 -0
  430. data/vendor/github.com/zeromq/libzmq/packaging/debian/libzmq3-dev.manpages +2 -0
  431. data/vendor/github.com/zeromq/libzmq/packaging/debian/libzmq5.docs +2 -0
  432. data/vendor/github.com/zeromq/libzmq/packaging/debian/libzmq5.install +1 -0
  433. data/vendor/github.com/zeromq/libzmq/packaging/debian/rules +67 -0
  434. data/vendor/github.com/zeromq/libzmq/packaging/debian/source/format +1 -0
  435. data/vendor/github.com/zeromq/libzmq/packaging/debian/zeromq.dsc.obs +15 -0
  436. data/vendor/github.com/zeromq/libzmq/packaging/nuget/package.bat +14 -0
  437. data/vendor/github.com/zeromq/libzmq/packaging/nuget/package.config +6 -0
  438. data/vendor/github.com/zeromq/libzmq/packaging/nuget/package.gsl +264 -0
  439. data/vendor/github.com/zeromq/libzmq/packaging/nuget/package.nuspec +98 -0
  440. data/vendor/github.com/zeromq/libzmq/packaging/nuget/package.targets +129 -0
  441. data/vendor/github.com/zeromq/libzmq/packaging/nuget/package.xml +22 -0
  442. data/vendor/github.com/zeromq/libzmq/packaging/obs/_service +98 -0
  443. data/vendor/github.com/zeromq/libzmq/packaging/redhat/zeromq.spec +234 -0
  444. data/vendor/github.com/zeromq/libzmq/perf/inproc_lat.cpp +240 -0
  445. data/vendor/github.com/zeromq/libzmq/perf/inproc_thr.cpp +250 -0
  446. data/vendor/github.com/zeromq/libzmq/perf/local_lat.cpp +116 -0
  447. data/vendor/github.com/zeromq/libzmq/perf/local_thr.cpp +160 -0
  448. data/vendor/github.com/zeromq/libzmq/perf/remote_lat.cpp +129 -0
  449. data/vendor/github.com/zeromq/libzmq/perf/remote_thr.cpp +135 -0
  450. data/vendor/github.com/zeromq/libzmq/src/address.cpp +134 -0
  451. data/vendor/github.com/zeromq/libzmq/src/address.hpp +77 -0
  452. data/vendor/github.com/zeromq/libzmq/src/array.hpp +167 -0
  453. data/vendor/github.com/zeromq/libzmq/src/atomic_counter.hpp +249 -0
  454. data/vendor/github.com/zeromq/libzmq/src/atomic_ptr.hpp +227 -0
  455. data/vendor/github.com/zeromq/libzmq/src/blob.hpp +186 -0
  456. data/vendor/github.com/zeromq/libzmq/src/client.cpp +116 -0
  457. data/vendor/github.com/zeromq/libzmq/src/client.hpp +81 -0
  458. data/vendor/github.com/zeromq/libzmq/src/clock.cpp +253 -0
  459. data/vendor/github.com/zeromq/libzmq/src/clock.hpp +83 -0
  460. data/vendor/github.com/zeromq/libzmq/src/command.hpp +188 -0
  461. data/vendor/github.com/zeromq/libzmq/src/condition_variable.hpp +279 -0
  462. data/vendor/github.com/zeromq/libzmq/src/config.hpp +98 -0
  463. data/vendor/github.com/zeromq/libzmq/src/ctx.cpp +644 -0
  464. data/vendor/github.com/zeromq/libzmq/src/ctx.hpp +242 -0
  465. data/vendor/github.com/zeromq/libzmq/src/curve_client.cpp +297 -0
  466. data/vendor/github.com/zeromq/libzmq/src/curve_client.hpp +87 -0
  467. data/vendor/github.com/zeromq/libzmq/src/curve_client_tools.hpp +307 -0
  468. data/vendor/github.com/zeromq/libzmq/src/curve_mechanism_base.cpp +181 -0
  469. data/vendor/github.com/zeromq/libzmq/src/curve_mechanism_base.hpp +79 -0
  470. data/vendor/github.com/zeromq/libzmq/src/curve_server.cpp +492 -0
  471. data/vendor/github.com/zeromq/libzmq/src/curve_server.hpp +94 -0
  472. data/vendor/github.com/zeromq/libzmq/src/dbuffer.hpp +144 -0
  473. data/vendor/github.com/zeromq/libzmq/src/dealer.cpp +143 -0
  474. data/vendor/github.com/zeromq/libzmq/src/dealer.hpp +89 -0
  475. data/vendor/github.com/zeromq/libzmq/src/decoder.hpp +198 -0
  476. data/vendor/github.com/zeromq/libzmq/src/decoder_allocators.cpp +144 -0
  477. data/vendor/github.com/zeromq/libzmq/src/decoder_allocators.hpp +155 -0
  478. data/vendor/github.com/zeromq/libzmq/src/devpoll.cpp +205 -0
  479. data/vendor/github.com/zeromq/libzmq/src/devpoll.hpp +119 -0
  480. data/vendor/github.com/zeromq/libzmq/src/dgram.cpp +177 -0
  481. data/vendor/github.com/zeromq/libzmq/src/dgram.hpp +81 -0
  482. data/vendor/github.com/zeromq/libzmq/src/dish.cpp +360 -0
  483. data/vendor/github.com/zeromq/libzmq/src/dish.hpp +125 -0
  484. data/vendor/github.com/zeromq/libzmq/src/dist.cpp +235 -0
  485. data/vendor/github.com/zeromq/libzmq/src/dist.hpp +120 -0
  486. data/vendor/github.com/zeromq/libzmq/src/encoder.hpp +189 -0
  487. data/vendor/github.com/zeromq/libzmq/src/epoll.cpp +206 -0
  488. data/vendor/github.com/zeromq/libzmq/src/epoll.hpp +119 -0
  489. data/vendor/github.com/zeromq/libzmq/src/err.cpp +447 -0
  490. data/vendor/github.com/zeromq/libzmq/src/err.hpp +173 -0
  491. data/vendor/github.com/zeromq/libzmq/src/fd.hpp +52 -0
  492. data/vendor/github.com/zeromq/libzmq/src/fq.cpp +163 -0
  493. data/vendor/github.com/zeromq/libzmq/src/fq.hpp +92 -0
  494. data/vendor/github.com/zeromq/libzmq/src/gather.cpp +94 -0
  495. data/vendor/github.com/zeromq/libzmq/src/gather.hpp +75 -0
  496. data/vendor/github.com/zeromq/libzmq/src/gssapi_client.cpp +237 -0
  497. data/vendor/github.com/zeromq/libzmq/src/gssapi_client.hpp +94 -0
  498. data/vendor/github.com/zeromq/libzmq/src/gssapi_mechanism_base.cpp +402 -0
  499. data/vendor/github.com/zeromq/libzmq/src/gssapi_mechanism_base.hpp +134 -0
  500. data/vendor/github.com/zeromq/libzmq/src/gssapi_server.cpp +249 -0
  501. data/vendor/github.com/zeromq/libzmq/src/gssapi_server.hpp +95 -0
  502. data/vendor/github.com/zeromq/libzmq/src/i_decoder.hpp +64 -0
  503. data/vendor/github.com/zeromq/libzmq/src/i_encoder.hpp +60 -0
  504. data/vendor/github.com/zeromq/libzmq/src/i_engine.hpp +68 -0
  505. data/vendor/github.com/zeromq/libzmq/src/i_mailbox.hpp +60 -0
  506. data/vendor/github.com/zeromq/libzmq/src/i_poll_events.hpp +55 -0
  507. data/vendor/github.com/zeromq/libzmq/src/io_object.cpp +117 -0
  508. data/vendor/github.com/zeromq/libzmq/src/io_object.hpp +89 -0
  509. data/vendor/github.com/zeromq/libzmq/src/io_thread.cpp +114 -0
  510. data/vendor/github.com/zeromq/libzmq/src/io_thread.hpp +99 -0
  511. data/vendor/github.com/zeromq/libzmq/src/ip.cpp +235 -0
  512. data/vendor/github.com/zeromq/libzmq/src/ip.hpp +64 -0
  513. data/vendor/github.com/zeromq/libzmq/src/ipc_address.cpp +106 -0
  514. data/vendor/github.com/zeromq/libzmq/src/ipc_address.hpp +74 -0
  515. data/vendor/github.com/zeromq/libzmq/src/ipc_connecter.cpp +278 -0
  516. data/vendor/github.com/zeromq/libzmq/src/ipc_connecter.hpp +135 -0
  517. data/vendor/github.com/zeromq/libzmq/src/ipc_listener.cpp +427 -0
  518. data/vendor/github.com/zeromq/libzmq/src/ipc_listener.hpp +123 -0
  519. data/vendor/github.com/zeromq/libzmq/src/kqueue.cpp +227 -0
  520. data/vendor/github.com/zeromq/libzmq/src/kqueue.hpp +127 -0
  521. data/vendor/github.com/zeromq/libzmq/src/lb.cpp +173 -0
  522. data/vendor/github.com/zeromq/libzmq/src/lb.hpp +88 -0
  523. data/vendor/github.com/zeromq/libzmq/src/libzmq.pc.cmake.in +11 -0
  524. data/vendor/github.com/zeromq/libzmq/src/libzmq.pc.in +11 -0
  525. data/vendor/github.com/zeromq/libzmq/src/libzmq.vers +4 -0
  526. data/vendor/github.com/zeromq/libzmq/src/likely.hpp +42 -0
  527. data/vendor/github.com/zeromq/libzmq/src/macros.hpp +12 -0
  528. data/vendor/github.com/zeromq/libzmq/src/mailbox.cpp +101 -0
  529. data/vendor/github.com/zeromq/libzmq/src/mailbox.hpp +90 -0
  530. data/vendor/github.com/zeromq/libzmq/src/mailbox_safe.cpp +117 -0
  531. data/vendor/github.com/zeromq/libzmq/src/mailbox_safe.hpp +94 -0
  532. data/vendor/github.com/zeromq/libzmq/src/mechanism.cpp +285 -0
  533. data/vendor/github.com/zeromq/libzmq/src/mechanism.hpp +152 -0
  534. data/vendor/github.com/zeromq/libzmq/src/mechanism_base.cpp +70 -0
  535. data/vendor/github.com/zeromq/libzmq/src/mechanism_base.hpp +53 -0
  536. data/vendor/github.com/zeromq/libzmq/src/metadata.cpp +62 -0
  537. data/vendor/github.com/zeromq/libzmq/src/metadata.hpp +70 -0
  538. data/vendor/github.com/zeromq/libzmq/src/msg.cpp +578 -0
  539. data/vendor/github.com/zeromq/libzmq/src/msg.hpp +268 -0
  540. data/vendor/github.com/zeromq/libzmq/src/mtrie.cpp +434 -0
  541. data/vendor/github.com/zeromq/libzmq/src/mtrie.hpp +102 -0
  542. data/vendor/github.com/zeromq/libzmq/src/mutex.hpp +213 -0
  543. data/vendor/github.com/zeromq/libzmq/src/norm_engine.cpp +736 -0
  544. data/vendor/github.com/zeromq/libzmq/src/norm_engine.hpp +190 -0
  545. data/vendor/github.com/zeromq/libzmq/src/null_mechanism.cpp +220 -0
  546. data/vendor/github.com/zeromq/libzmq/src/null_mechanism.hpp +77 -0
  547. data/vendor/github.com/zeromq/libzmq/src/object.cpp +476 -0
  548. data/vendor/github.com/zeromq/libzmq/src/object.hpp +156 -0
  549. data/vendor/github.com/zeromq/libzmq/src/options.cpp +1089 -0
  550. data/vendor/github.com/zeromq/libzmq/src/options.hpp +251 -0
  551. data/vendor/github.com/zeromq/libzmq/src/own.cpp +216 -0
  552. data/vendor/github.com/zeromq/libzmq/src/own.hpp +154 -0
  553. data/vendor/github.com/zeromq/libzmq/src/pair.cpp +142 -0
  554. data/vendor/github.com/zeromq/libzmq/src/pair.hpp +78 -0
  555. data/vendor/github.com/zeromq/libzmq/src/pgm_receiver.cpp +307 -0
  556. data/vendor/github.com/zeromq/libzmq/src/pgm_receiver.hpp +147 -0
  557. data/vendor/github.com/zeromq/libzmq/src/pgm_sender.cpp +257 -0
  558. data/vendor/github.com/zeromq/libzmq/src/pgm_sender.hpp +124 -0
  559. data/vendor/github.com/zeromq/libzmq/src/pgm_socket.cpp +712 -0
  560. data/vendor/github.com/zeromq/libzmq/src/pgm_socket.hpp +128 -0
  561. data/vendor/github.com/zeromq/libzmq/src/pipe.cpp +547 -0
  562. data/vendor/github.com/zeromq/libzmq/src/pipe.hpp +253 -0
  563. data/vendor/github.com/zeromq/libzmq/src/plain_client.cpp +220 -0
  564. data/vendor/github.com/zeromq/libzmq/src/plain_client.hpp +79 -0
  565. data/vendor/github.com/zeromq/libzmq/src/plain_server.cpp +253 -0
  566. data/vendor/github.com/zeromq/libzmq/src/plain_server.hpp +71 -0
  567. data/vendor/github.com/zeromq/libzmq/src/poll.cpp +193 -0
  568. data/vendor/github.com/zeromq/libzmq/src/poll.hpp +121 -0
  569. data/vendor/github.com/zeromq/libzmq/src/poller.hpp +64 -0
  570. data/vendor/github.com/zeromq/libzmq/src/poller_base.cpp +110 -0
  571. data/vendor/github.com/zeromq/libzmq/src/poller_base.hpp +95 -0
  572. data/vendor/github.com/zeromq/libzmq/src/pollset.cpp +254 -0
  573. data/vendor/github.com/zeromq/libzmq/src/pollset.hpp +121 -0
  574. data/vendor/github.com/zeromq/libzmq/src/precompiled.cpp +30 -0
  575. data/vendor/github.com/zeromq/libzmq/src/precompiled.hpp +120 -0
  576. data/vendor/github.com/zeromq/libzmq/src/proxy.cpp +622 -0
  577. data/vendor/github.com/zeromq/libzmq/src/proxy.hpp +42 -0
  578. data/vendor/github.com/zeromq/libzmq/src/pub.cpp +67 -0
  579. data/vendor/github.com/zeromq/libzmq/src/pub.hpp +63 -0
  580. data/vendor/github.com/zeromq/libzmq/src/pull.cpp +78 -0
  581. data/vendor/github.com/zeromq/libzmq/src/pull.hpp +75 -0
  582. data/vendor/github.com/zeromq/libzmq/src/push.cpp +77 -0
  583. data/vendor/github.com/zeromq/libzmq/src/push.hpp +73 -0
  584. data/vendor/github.com/zeromq/libzmq/src/radio.cpp +252 -0
  585. data/vendor/github.com/zeromq/libzmq/src/radio.hpp +112 -0
  586. data/vendor/github.com/zeromq/libzmq/src/random.cpp +118 -0
  587. data/vendor/github.com/zeromq/libzmq/src/random.hpp +52 -0
  588. data/vendor/github.com/zeromq/libzmq/src/raw_decoder.cpp +74 -0
  589. data/vendor/github.com/zeromq/libzmq/src/raw_decoder.hpp +74 -0
  590. data/vendor/github.com/zeromq/libzmq/src/raw_encoder.cpp +51 -0
  591. data/vendor/github.com/zeromq/libzmq/src/raw_encoder.hpp +64 -0
  592. data/vendor/github.com/zeromq/libzmq/src/reaper.cpp +142 -0
  593. data/vendor/github.com/zeromq/libzmq/src/reaper.hpp +94 -0
  594. data/vendor/github.com/zeromq/libzmq/src/rep.cpp +134 -0
  595. data/vendor/github.com/zeromq/libzmq/src/rep.hpp +73 -0
  596. data/vendor/github.com/zeromq/libzmq/src/req.cpp +323 -0
  597. data/vendor/github.com/zeromq/libzmq/src/req.hpp +121 -0
  598. data/vendor/github.com/zeromq/libzmq/src/router.cpp +551 -0
  599. data/vendor/github.com/zeromq/libzmq/src/router.hpp +147 -0
  600. data/vendor/github.com/zeromq/libzmq/src/scatter.cpp +83 -0
  601. data/vendor/github.com/zeromq/libzmq/src/scatter.hpp +73 -0
  602. data/vendor/github.com/zeromq/libzmq/src/select.cpp +567 -0
  603. data/vendor/github.com/zeromq/libzmq/src/select.hpp +184 -0
  604. data/vendor/github.com/zeromq/libzmq/src/server.cpp +184 -0
  605. data/vendor/github.com/zeromq/libzmq/src/server.hpp +96 -0
  606. data/vendor/github.com/zeromq/libzmq/src/session_base.cpp +716 -0
  607. data/vendor/github.com/zeromq/libzmq/src/session_base.hpp +173 -0
  608. data/vendor/github.com/zeromq/libzmq/src/signaler.cpp +682 -0
  609. data/vendor/github.com/zeromq/libzmq/src/signaler.hpp +91 -0
  610. data/vendor/github.com/zeromq/libzmq/src/socket_base.cpp +1778 -0
  611. data/vendor/github.com/zeromq/libzmq/src/socket_base.hpp +307 -0
  612. data/vendor/github.com/zeromq/libzmq/src/socket_poller.cpp +697 -0
  613. data/vendor/github.com/zeromq/libzmq/src/socket_poller.hpp +145 -0
  614. data/vendor/github.com/zeromq/libzmq/src/socks.cpp +286 -0
  615. data/vendor/github.com/zeromq/libzmq/src/socks.hpp +135 -0
  616. data/vendor/github.com/zeromq/libzmq/src/socks_connecter.cpp +482 -0
  617. data/vendor/github.com/zeromq/libzmq/src/socks_connecter.hpp +163 -0
  618. data/vendor/github.com/zeromq/libzmq/src/stdint.hpp +77 -0
  619. data/vendor/github.com/zeromq/libzmq/src/stream.cpp +321 -0
  620. data/vendor/github.com/zeromq/libzmq/src/stream.hpp +107 -0
  621. data/vendor/github.com/zeromq/libzmq/src/stream_engine.cpp +1110 -0
  622. data/vendor/github.com/zeromq/libzmq/src/stream_engine.hpp +233 -0
  623. data/vendor/github.com/zeromq/libzmq/src/sub.cpp +87 -0
  624. data/vendor/github.com/zeromq/libzmq/src/sub.hpp +64 -0
  625. data/vendor/github.com/zeromq/libzmq/src/tcp.cpp +356 -0
  626. data/vendor/github.com/zeromq/libzmq/src/tcp.hpp +69 -0
  627. data/vendor/github.com/zeromq/libzmq/src/tcp_address.cpp +897 -0
  628. data/vendor/github.com/zeromq/libzmq/src/tcp_address.hpp +117 -0
  629. data/vendor/github.com/zeromq/libzmq/src/tcp_connecter.cpp +426 -0
  630. data/vendor/github.com/zeromq/libzmq/src/tcp_connecter.hpp +134 -0
  631. data/vendor/github.com/zeromq/libzmq/src/tcp_listener.cpp +357 -0
  632. data/vendor/github.com/zeromq/libzmq/src/tcp_listener.hpp +98 -0
  633. data/vendor/github.com/zeromq/libzmq/src/thread.cpp +238 -0
  634. data/vendor/github.com/zeromq/libzmq/src/thread.hpp +102 -0
  635. data/vendor/github.com/zeromq/libzmq/src/timers.cpp +199 -0
  636. data/vendor/github.com/zeromq/libzmq/src/timers.hpp +110 -0
  637. data/vendor/github.com/zeromq/libzmq/src/tipc_address.cpp +124 -0
  638. data/vendor/github.com/zeromq/libzmq/src/tipc_address.hpp +75 -0
  639. data/vendor/github.com/zeromq/libzmq/src/tipc_connecter.cpp +268 -0
  640. data/vendor/github.com/zeromq/libzmq/src/tipc_connecter.hpp +137 -0
  641. data/vendor/github.com/zeromq/libzmq/src/tipc_listener.cpp +190 -0
  642. data/vendor/github.com/zeromq/libzmq/src/tipc_listener.hpp +107 -0
  643. data/vendor/github.com/zeromq/libzmq/src/trie.cpp +340 -0
  644. data/vendor/github.com/zeromq/libzmq/src/trie.hpp +86 -0
  645. data/vendor/github.com/zeromq/libzmq/src/tweetnacl.c +988 -0
  646. data/vendor/github.com/zeromq/libzmq/src/tweetnacl.h +75 -0
  647. data/vendor/github.com/zeromq/libzmq/src/udp_address.cpp +172 -0
  648. data/vendor/github.com/zeromq/libzmq/src/udp_address.hpp +78 -0
  649. data/vendor/github.com/zeromq/libzmq/src/udp_engine.cpp +394 -0
  650. data/vendor/github.com/zeromq/libzmq/src/udp_engine.hpp +73 -0
  651. data/vendor/github.com/zeromq/libzmq/src/v1_decoder.cpp +153 -0
  652. data/vendor/github.com/zeromq/libzmq/src/v1_decoder.hpp +69 -0
  653. data/vendor/github.com/zeromq/libzmq/src/v1_encoder.cpp +76 -0
  654. data/vendor/github.com/zeromq/libzmq/src/v1_encoder.hpp +59 -0
  655. data/vendor/github.com/zeromq/libzmq/src/v2_decoder.cpp +161 -0
  656. data/vendor/github.com/zeromq/libzmq/src/v2_decoder.hpp +74 -0
  657. data/vendor/github.com/zeromq/libzmq/src/v2_encoder.cpp +78 -0
  658. data/vendor/github.com/zeromq/libzmq/src/v2_encoder.hpp +59 -0
  659. data/vendor/github.com/zeromq/libzmq/src/v2_protocol.hpp +49 -0
  660. data/vendor/github.com/zeromq/libzmq/src/version.rc.in +93 -0
  661. data/vendor/github.com/zeromq/libzmq/src/vmci.cpp +88 -0
  662. data/vendor/github.com/zeromq/libzmq/src/vmci.hpp +60 -0
  663. data/vendor/github.com/zeromq/libzmq/src/vmci_address.cpp +170 -0
  664. data/vendor/github.com/zeromq/libzmq/src/vmci_address.hpp +71 -0
  665. data/vendor/github.com/zeromq/libzmq/src/vmci_connecter.cpp +307 -0
  666. data/vendor/github.com/zeromq/libzmq/src/vmci_connecter.hpp +136 -0
  667. data/vendor/github.com/zeromq/libzmq/src/vmci_listener.cpp +262 -0
  668. data/vendor/github.com/zeromq/libzmq/src/vmci_listener.hpp +102 -0
  669. data/vendor/github.com/zeromq/libzmq/src/windows.hpp +93 -0
  670. data/vendor/github.com/zeromq/libzmq/src/wire.hpp +108 -0
  671. data/vendor/github.com/zeromq/libzmq/src/xpub.cpp +340 -0
  672. data/vendor/github.com/zeromq/libzmq/src/xpub.hpp +126 -0
  673. data/vendor/github.com/zeromq/libzmq/src/xsub.cpp +251 -0
  674. data/vendor/github.com/zeromq/libzmq/src/xsub.hpp +103 -0
  675. data/vendor/github.com/zeromq/libzmq/src/ypipe.hpp +218 -0
  676. data/vendor/github.com/zeromq/libzmq/src/ypipe_base.hpp +54 -0
  677. data/vendor/github.com/zeromq/libzmq/src/ypipe_conflate.hpp +137 -0
  678. data/vendor/github.com/zeromq/libzmq/src/yqueue.hpp +225 -0
  679. data/vendor/github.com/zeromq/libzmq/src/zap_client.cpp +305 -0
  680. data/vendor/github.com/zeromq/libzmq/src/zap_client.hpp +100 -0
  681. data/vendor/github.com/zeromq/libzmq/src/zmq.cpp +1527 -0
  682. data/vendor/github.com/zeromq/libzmq/src/zmq_draft.h +178 -0
  683. data/vendor/github.com/zeromq/libzmq/src/zmq_utils.cpp +318 -0
  684. data/vendor/github.com/zeromq/libzmq/tests/CMakeLists.txt +218 -0
  685. data/vendor/github.com/zeromq/libzmq/tests/README.md +28 -0
  686. data/vendor/github.com/zeromq/libzmq/tests/test_abstract_ipc.cpp +67 -0
  687. data/vendor/github.com/zeromq/libzmq/tests/test_ancillaries.cpp +51 -0
  688. data/vendor/github.com/zeromq/libzmq/tests/test_atomics.cpp +48 -0
  689. data/vendor/github.com/zeromq/libzmq/tests/test_base85.cpp +162 -0
  690. data/vendor/github.com/zeromq/libzmq/tests/test_bind_after_connect_tcp.cpp +97 -0
  691. data/vendor/github.com/zeromq/libzmq/tests/test_bind_src_address.cpp +57 -0
  692. data/vendor/github.com/zeromq/libzmq/tests/test_capabilities.cpp +82 -0
  693. data/vendor/github.com/zeromq/libzmq/tests/test_client_server.cpp +106 -0
  694. data/vendor/github.com/zeromq/libzmq/tests/test_conflate.cpp +86 -0
  695. data/vendor/github.com/zeromq/libzmq/tests/test_connect_delay_tipc.cpp +238 -0
  696. data/vendor/github.com/zeromq/libzmq/tests/test_connect_resolve.cpp +70 -0
  697. data/vendor/github.com/zeromq/libzmq/tests/test_connect_rid.cpp +199 -0
  698. data/vendor/github.com/zeromq/libzmq/tests/test_ctx_destroy.cpp +110 -0
  699. data/vendor/github.com/zeromq/libzmq/tests/test_ctx_options.cpp +204 -0
  700. data/vendor/github.com/zeromq/libzmq/tests/test_dgram.cpp +99 -0
  701. data/vendor/github.com/zeromq/libzmq/tests/test_diffserv.cpp +85 -0
  702. data/vendor/github.com/zeromq/libzmq/tests/test_disconnect_inproc.cpp +136 -0
  703. data/vendor/github.com/zeromq/libzmq/tests/test_filter_ipc.cpp +166 -0
  704. data/vendor/github.com/zeromq/libzmq/tests/test_fork.cpp +99 -0
  705. data/vendor/github.com/zeromq/libzmq/tests/test_getsockopt_memset.cpp +64 -0
  706. data/vendor/github.com/zeromq/libzmq/tests/test_heartbeats.cpp +341 -0
  707. data/vendor/github.com/zeromq/libzmq/tests/test_hwm.cpp +312 -0
  708. data/vendor/github.com/zeromq/libzmq/tests/test_hwm_pubsub.cpp +253 -0
  709. data/vendor/github.com/zeromq/libzmq/tests/test_immediate.cpp +250 -0
  710. data/vendor/github.com/zeromq/libzmq/tests/test_inproc_connect.cpp +536 -0
  711. data/vendor/github.com/zeromq/libzmq/tests/test_invalid_rep.cpp +98 -0
  712. data/vendor/github.com/zeromq/libzmq/tests/test_iov.cpp +157 -0
  713. data/vendor/github.com/zeromq/libzmq/tests/test_ipc_wildcard.cpp +65 -0
  714. data/vendor/github.com/zeromq/libzmq/tests/test_issue_566.cpp +99 -0
  715. data/vendor/github.com/zeromq/libzmq/tests/test_last_endpoint.cpp +66 -0
  716. data/vendor/github.com/zeromq/libzmq/tests/test_many_sockets.cpp +100 -0
  717. data/vendor/github.com/zeromq/libzmq/tests/test_metadata.cpp +134 -0
  718. data/vendor/github.com/zeromq/libzmq/tests/test_monitor.cpp +116 -0
  719. data/vendor/github.com/zeromq/libzmq/tests/test_msg_ffn.cpp +145 -0
  720. data/vendor/github.com/zeromq/libzmq/tests/test_msg_flags.cpp +127 -0
  721. data/vendor/github.com/zeromq/libzmq/tests/test_pair_inproc.cpp +81 -0
  722. data/vendor/github.com/zeromq/libzmq/tests/test_pair_ipc.cpp +60 -0
  723. data/vendor/github.com/zeromq/libzmq/tests/test_pair_tcp.cpp +64 -0
  724. data/vendor/github.com/zeromq/libzmq/tests/test_pair_tipc.cpp +62 -0
  725. data/vendor/github.com/zeromq/libzmq/tests/test_pair_vmci.cpp +68 -0
  726. data/vendor/github.com/zeromq/libzmq/tests/test_poller.cpp +404 -0
  727. data/vendor/github.com/zeromq/libzmq/tests/test_probe_router.cpp +86 -0
  728. data/vendor/github.com/zeromq/libzmq/tests/test_proxy.cpp +486 -0
  729. data/vendor/github.com/zeromq/libzmq/tests/test_proxy_single_socket.cpp +121 -0
  730. data/vendor/github.com/zeromq/libzmq/tests/test_proxy_terminate.cpp +132 -0
  731. data/vendor/github.com/zeromq/libzmq/tests/test_pub_invert_matching.cpp +136 -0
  732. data/vendor/github.com/zeromq/libzmq/tests/test_radio_dish.cpp +191 -0
  733. data/vendor/github.com/zeromq/libzmq/tests/test_rebind_ipc.cpp +84 -0
  734. data/vendor/github.com/zeromq/libzmq/tests/test_reconnect_ivl.cpp +149 -0
  735. data/vendor/github.com/zeromq/libzmq/tests/test_req_correlate.cpp +140 -0
  736. data/vendor/github.com/zeromq/libzmq/tests/test_req_relaxed.cpp +220 -0
  737. data/vendor/github.com/zeromq/libzmq/tests/test_reqrep_device.cpp +153 -0
  738. data/vendor/github.com/zeromq/libzmq/tests/test_reqrep_device_tipc.cpp +146 -0
  739. data/vendor/github.com/zeromq/libzmq/tests/test_reqrep_inproc.cpp +60 -0
  740. data/vendor/github.com/zeromq/libzmq/tests/test_reqrep_ipc.cpp +112 -0
  741. data/vendor/github.com/zeromq/libzmq/tests/test_reqrep_tcp.cpp +336 -0
  742. data/vendor/github.com/zeromq/libzmq/tests/test_reqrep_tipc.cpp +61 -0
  743. data/vendor/github.com/zeromq/libzmq/tests/test_reqrep_vmci.cpp +68 -0
  744. data/vendor/github.com/zeromq/libzmq/tests/test_router_handover.cpp +116 -0
  745. data/vendor/github.com/zeromq/libzmq/tests/test_router_mandatory.cpp +292 -0
  746. data/vendor/github.com/zeromq/libzmq/tests/test_router_mandatory_hwm.cpp +129 -0
  747. data/vendor/github.com/zeromq/libzmq/tests/test_router_mandatory_tipc.cpp +70 -0
  748. data/vendor/github.com/zeromq/libzmq/tests/test_scatter_gather.cpp +84 -0
  749. data/vendor/github.com/zeromq/libzmq/tests/test_security_curve.cpp +792 -0
  750. data/vendor/github.com/zeromq/libzmq/tests/test_security_gssapi.cpp +362 -0
  751. data/vendor/github.com/zeromq/libzmq/tests/test_security_null.cpp +209 -0
  752. data/vendor/github.com/zeromq/libzmq/tests/test_security_plain.cpp +212 -0
  753. data/vendor/github.com/zeromq/libzmq/tests/test_security_zap.cpp +417 -0
  754. data/vendor/github.com/zeromq/libzmq/tests/test_setsockopt.cpp +153 -0
  755. data/vendor/github.com/zeromq/libzmq/tests/test_shutdown_stress.cpp +101 -0
  756. data/vendor/github.com/zeromq/libzmq/tests/test_shutdown_stress_tipc.cpp +95 -0
  757. data/vendor/github.com/zeromq/libzmq/tests/test_socket_null.cpp +82 -0
  758. data/vendor/github.com/zeromq/libzmq/tests/test_sockopt_hwm.cpp +190 -0
  759. data/vendor/github.com/zeromq/libzmq/tests/test_sodium.cpp +98 -0
  760. data/vendor/github.com/zeromq/libzmq/tests/test_spec_dealer.cpp +266 -0
  761. data/vendor/github.com/zeromq/libzmq/tests/test_spec_pushpull.cpp +304 -0
  762. data/vendor/github.com/zeromq/libzmq/tests/test_spec_rep.cpp +169 -0
  763. data/vendor/github.com/zeromq/libzmq/tests/test_spec_req.cpp +266 -0
  764. data/vendor/github.com/zeromq/libzmq/tests/test_spec_router.cpp +217 -0
  765. data/vendor/github.com/zeromq/libzmq/tests/test_srcfd.cpp +127 -0
  766. data/vendor/github.com/zeromq/libzmq/tests/test_stream.cpp +342 -0
  767. data/vendor/github.com/zeromq/libzmq/tests/test_stream_disconnect.cpp +295 -0
  768. data/vendor/github.com/zeromq/libzmq/tests/test_stream_empty.cpp +74 -0
  769. data/vendor/github.com/zeromq/libzmq/tests/test_stream_exceeds_buffer.cpp +124 -0
  770. data/vendor/github.com/zeromq/libzmq/tests/test_stream_timeout.cpp +235 -0
  771. data/vendor/github.com/zeromq/libzmq/tests/test_sub_forward.cpp +109 -0
  772. data/vendor/github.com/zeromq/libzmq/tests/test_sub_forward_tipc.cpp +102 -0
  773. data/vendor/github.com/zeromq/libzmq/tests/test_system.cpp +98 -0
  774. data/vendor/github.com/zeromq/libzmq/tests/test_term_endpoint.cpp +226 -0
  775. data/vendor/github.com/zeromq/libzmq/tests/test_term_endpoint_tipc.cpp +120 -0
  776. data/vendor/github.com/zeromq/libzmq/tests/test_thread_safe.cpp +90 -0
  777. data/vendor/github.com/zeromq/libzmq/tests/test_timeo.cpp +85 -0
  778. data/vendor/github.com/zeromq/libzmq/tests/test_timers.cpp +226 -0
  779. data/vendor/github.com/zeromq/libzmq/tests/test_udp.cpp +133 -0
  780. data/vendor/github.com/zeromq/libzmq/tests/test_unbind_inproc.cpp +43 -0
  781. data/vendor/github.com/zeromq/libzmq/tests/test_unbind_wildcard.cpp +216 -0
  782. data/vendor/github.com/zeromq/libzmq/tests/test_use_fd_ipc.cpp +223 -0
  783. data/vendor/github.com/zeromq/libzmq/tests/test_use_fd_tcp.cpp +238 -0
  784. data/vendor/github.com/zeromq/libzmq/tests/test_xpub_manual.cpp +597 -0
  785. data/vendor/github.com/zeromq/libzmq/tests/test_xpub_nodrop.cpp +118 -0
  786. data/vendor/github.com/zeromq/libzmq/tests/test_xpub_welcome_msg.cpp +81 -0
  787. data/vendor/github.com/zeromq/libzmq/tests/test_zmq_poll_fd.cpp +98 -0
  788. data/vendor/github.com/zeromq/libzmq/tests/testutil.hpp +408 -0
  789. data/vendor/github.com/zeromq/libzmq/tests/testutil_security.hpp +684 -0
  790. data/vendor/github.com/zeromq/libzmq/tools/curve_keygen.cpp +58 -0
  791. data/vendor/github.com/zeromq/libzmq/version.sh +21 -0
  792. metadata +875 -0
@@ -0,0 +1,305 @@
1
+ /*
2
+ Copyright (c) 2007-2016 Contributors as noted in the AUTHORS file
3
+
4
+ This file is part of libzmq, the ZeroMQ core engine in C++.
5
+
6
+ libzmq is free software; you can redistribute it and/or modify it under
7
+ the terms of the GNU Lesser General Public License (LGPL) as published
8
+ by the Free Software Foundation; either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ As a special exception, the Contributors give you permission to link
12
+ this library with independent modules to produce an executable,
13
+ regardless of the license terms of these independent modules, and to
14
+ copy and distribute the resulting executable under terms of your choice,
15
+ provided that you also meet, for each linked independent module, the
16
+ terms and conditions of the license of that module. An independent
17
+ module is a module which is not derived from or based on this library.
18
+ If you modify this library, you must extend this exception to your
19
+ version of the library.
20
+
21
+ libzmq is distributed in the hope that it will be useful, but WITHOUT
22
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
24
+ License for more details.
25
+
26
+ You should have received a copy of the GNU Lesser General Public License
27
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
28
+ */
29
+
30
+ #include "precompiled.hpp"
31
+
32
+ #include "zap_client.hpp"
33
+ #include "msg.hpp"
34
+ #include "session_base.hpp"
35
+
36
+ namespace zmq
37
+ {
38
+ zap_client_t::zap_client_t (session_base_t *const session_,
39
+ const std::string &peer_address_,
40
+ const options_t &options_) :
41
+ mechanism_base_t (session_, options_),
42
+ peer_address (peer_address_)
43
+ {
44
+ }
45
+
46
+ void zap_client_t::send_zap_request (const char *mechanism,
47
+ size_t mechanism_length,
48
+ const uint8_t *credentials,
49
+ size_t credentials_size)
50
+ {
51
+ send_zap_request (mechanism, mechanism_length, &credentials,
52
+ &credentials_size, 1);
53
+ }
54
+
55
+ void zap_client_t::send_zap_request (const char *mechanism,
56
+ size_t mechanism_length,
57
+ const uint8_t **credentials,
58
+ size_t *credentials_sizes,
59
+ size_t credentials_count)
60
+ {
61
+ // write_zap_msg cannot fail. It could only fail if the HWM was exceeded,
62
+ // but on the ZAP socket, the HWM is disabled.
63
+
64
+ int rc;
65
+ msg_t msg;
66
+
67
+ // Address delimiter frame
68
+ rc = msg.init ();
69
+ errno_assert (rc == 0);
70
+ msg.set_flags (msg_t::more);
71
+ rc = session->write_zap_msg (&msg);
72
+ errno_assert (rc == 0);
73
+
74
+ // Version frame
75
+ rc = msg.init_size (3);
76
+ errno_assert (rc == 0);
77
+ memcpy (msg.data (), "1.0", 3);
78
+ msg.set_flags (msg_t::more);
79
+ rc = session->write_zap_msg (&msg);
80
+ errno_assert (rc == 0);
81
+
82
+ // Request ID frame
83
+ rc = msg.init_size (1);
84
+ errno_assert (rc == 0);
85
+ memcpy (msg.data (), "1", 1);
86
+ msg.set_flags (msg_t::more);
87
+ rc = session->write_zap_msg (&msg);
88
+ errno_assert (rc == 0);
89
+
90
+ // Domain frame
91
+ rc = msg.init_size (options.zap_domain.length ());
92
+ errno_assert (rc == 0);
93
+ memcpy (msg.data (), options.zap_domain.c_str (),
94
+ options.zap_domain.length ());
95
+ msg.set_flags (msg_t::more);
96
+ rc = session->write_zap_msg (&msg);
97
+ errno_assert (rc == 0);
98
+
99
+ // Address frame
100
+ rc = msg.init_size (peer_address.length ());
101
+ errno_assert (rc == 0);
102
+ memcpy (msg.data (), peer_address.c_str (), peer_address.length ());
103
+ msg.set_flags (msg_t::more);
104
+ rc = session->write_zap_msg (&msg);
105
+ errno_assert (rc == 0);
106
+
107
+ // Routing id frame
108
+ rc = msg.init_size (options.routing_id_size);
109
+ errno_assert (rc == 0);
110
+ memcpy (msg.data (), options.routing_id, options.routing_id_size);
111
+ msg.set_flags (msg_t::more);
112
+ rc = session->write_zap_msg (&msg);
113
+ errno_assert (rc == 0);
114
+
115
+ // Mechanism frame
116
+ rc = msg.init_size (mechanism_length);
117
+ errno_assert (rc == 0);
118
+ memcpy (msg.data (), mechanism, mechanism_length);
119
+ if (credentials_count)
120
+ msg.set_flags (msg_t::more);
121
+ rc = session->write_zap_msg (&msg);
122
+ errno_assert (rc == 0);
123
+
124
+ // Credentials frames
125
+ for (size_t i = 0; i < credentials_count; ++i) {
126
+ rc = msg.init_size (credentials_sizes[i]);
127
+ errno_assert (rc == 0);
128
+ if (i < credentials_count - 1)
129
+ msg.set_flags (msg_t::more);
130
+ memcpy (msg.data (), credentials[i], credentials_sizes[i]);
131
+ rc = session->write_zap_msg (&msg);
132
+ errno_assert (rc == 0);
133
+ }
134
+ }
135
+
136
+ int zap_client_t::receive_and_process_zap_reply ()
137
+ {
138
+ int rc = 0;
139
+ msg_t msg[7]; // ZAP reply consists of 7 frames
140
+
141
+ // Initialize all reply frames
142
+ for (int i = 0; i < 7; i++) {
143
+ rc = msg[i].init ();
144
+ errno_assert (rc == 0);
145
+ }
146
+
147
+ for (int i = 0; i < 7; i++) {
148
+ rc = session->read_zap_msg (&msg[i]);
149
+ if (rc == -1) {
150
+ if (errno == EAGAIN) {
151
+ return 1;
152
+ }
153
+ return close_and_return (msg, -1);
154
+ }
155
+ if ((msg[i].flags () & msg_t::more) == (i < 6 ? 0 : msg_t::more)) {
156
+ session->get_socket ()->event_handshake_failed_protocol (
157
+ session->get_endpoint (), ZMQ_PROTOCOL_ERROR_ZAP_MALFORMED_REPLY);
158
+ errno = EPROTO;
159
+ return close_and_return (msg, -1);
160
+ }
161
+ }
162
+
163
+ // Address delimiter frame
164
+ if (msg[0].size () > 0) {
165
+ // TODO can a ZAP handler produce such a message at all?
166
+ session->get_socket ()->event_handshake_failed_protocol (
167
+ session->get_endpoint (), ZMQ_PROTOCOL_ERROR_ZAP_UNSPECIFIED);
168
+ errno = EPROTO;
169
+ return close_and_return (msg, -1);
170
+ }
171
+
172
+ // Version frame
173
+ if (msg[1].size () != 3 || memcmp (msg[1].data (), "1.0", 3)) {
174
+ session->get_socket ()->event_handshake_failed_protocol (
175
+ session->get_endpoint (), ZMQ_PROTOCOL_ERROR_ZAP_BAD_VERSION);
176
+ errno = EPROTO;
177
+ return close_and_return (msg, -1);
178
+ }
179
+
180
+ // Request id frame
181
+ if (msg[2].size () != 1 || memcmp (msg[2].data (), "1", 1)) {
182
+ session->get_socket ()->event_handshake_failed_protocol (
183
+ session->get_endpoint (), ZMQ_PROTOCOL_ERROR_ZAP_BAD_REQUEST_ID);
184
+ errno = EPROTO;
185
+ return close_and_return (msg, -1);
186
+ }
187
+
188
+ // Status code frame, only 200, 300, 400 and 500 are valid status codes
189
+ char *status_code_data = static_cast<char *> (msg[3].data ());
190
+ if (msg[3].size () != 3 || status_code_data[0] < '2'
191
+ || status_code_data[0] > '5' || status_code_data[1] != '0'
192
+ || status_code_data[2] != '0') {
193
+ session->get_socket ()->event_handshake_failed_protocol (
194
+ session->get_endpoint (), ZMQ_PROTOCOL_ERROR_ZAP_INVALID_STATUS_CODE);
195
+ errno = EPROTO;
196
+ return close_and_return (msg, -1);
197
+ }
198
+
199
+ // Save status code
200
+ status_code.assign (static_cast<char *> (msg[3].data ()), 3);
201
+
202
+ // Save user id
203
+ set_user_id (msg[5].data (), msg[5].size ());
204
+
205
+ // Process metadata frame
206
+ rc = parse_metadata (static_cast<const unsigned char *> (msg[6].data ()),
207
+ msg[6].size (), true);
208
+
209
+ if (rc != 0) {
210
+ session->get_socket ()->event_handshake_failed_protocol (
211
+ session->get_endpoint (), ZMQ_PROTOCOL_ERROR_ZAP_INVALID_METADATA);
212
+ errno = EPROTO;
213
+ return close_and_return (msg, -1);
214
+ }
215
+
216
+ // Close all reply frames
217
+ for (int i = 0; i < 7; i++) {
218
+ const int rc2 = msg[i].close ();
219
+ errno_assert (rc2 == 0);
220
+ }
221
+
222
+ handle_zap_status_code ();
223
+
224
+ return 0;
225
+ }
226
+
227
+ void zap_client_t::handle_zap_status_code ()
228
+ {
229
+ // we can assume here that status_code is a valid ZAP status code,
230
+ // i.e. 200, 300, 400 or 500
231
+ int status_code_numeric = 0;
232
+ switch (status_code[0]) {
233
+ case '2':
234
+ return;
235
+ case '3':
236
+ status_code_numeric = 300;
237
+ break;
238
+ case '4':
239
+ status_code_numeric = 400;
240
+ break;
241
+ case '5':
242
+ status_code_numeric = 500;
243
+ break;
244
+ }
245
+
246
+ session->get_socket ()->event_handshake_failed_auth (
247
+ session->get_endpoint (), status_code_numeric);
248
+ }
249
+
250
+ zap_client_common_handshake_t::zap_client_common_handshake_t (
251
+ session_base_t *const session_,
252
+ const std::string &peer_address_,
253
+ const options_t &options_,
254
+ state_t zap_reply_ok_state_) :
255
+ mechanism_base_t (session_, options_),
256
+ zap_client_t (session_, peer_address_, options_),
257
+ state (waiting_for_hello),
258
+ zap_reply_ok_state (zap_reply_ok_state_)
259
+ {
260
+ }
261
+
262
+ zmq::mechanism_t::status_t zap_client_common_handshake_t::status () const
263
+ {
264
+ if (state == ready)
265
+ return mechanism_t::ready;
266
+ else if (state == error_sent)
267
+ return mechanism_t::error;
268
+ else
269
+ return mechanism_t::handshaking;
270
+ }
271
+
272
+ int zap_client_common_handshake_t::zap_msg_available ()
273
+ {
274
+ zmq_assert (state == waiting_for_zap_reply);
275
+ return receive_and_process_zap_reply () == -1 ? -1 : 0;
276
+ }
277
+
278
+ void zap_client_common_handshake_t::handle_zap_status_code ()
279
+ {
280
+ zap_client_t::handle_zap_status_code ();
281
+
282
+ // we can assume here that status_code is a valid ZAP status code,
283
+ // i.e. 200, 300, 400 or 500
284
+ switch (status_code[0]) {
285
+ case '2':
286
+ state = zap_reply_ok_state;
287
+ break;
288
+ case '3':
289
+ // a 300 error code (temporary failure)
290
+ // should NOT result in an ERROR message, but instead the
291
+ // client should be silently disconnected (see CURVEZMQ RFC)
292
+ // therefore, go immediately to state error_sent
293
+ state = error_sent;
294
+ break;
295
+ default:
296
+ state = sending_error;
297
+ }
298
+ }
299
+
300
+ int zap_client_common_handshake_t::receive_and_process_zap_reply ()
301
+ {
302
+ zmq_assert (state == waiting_for_zap_reply);
303
+ return zap_client_t::receive_and_process_zap_reply ();
304
+ }
305
+ }
@@ -0,0 +1,100 @@
1
+ /*
2
+ Copyright (c) 2007-2016 Contributors as noted in the AUTHORS file
3
+
4
+ This file is part of libzmq, the ZeroMQ core engine in C++.
5
+
6
+ libzmq is free software; you can redistribute it and/or modify it under
7
+ the terms of the GNU Lesser General Public License (LGPL) as published
8
+ by the Free Software Foundation; either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ As a special exception, the Contributors give you permission to link
12
+ this library with independent modules to produce an executable,
13
+ regardless of the license terms of these independent modules, and to
14
+ copy and distribute the resulting executable under terms of your choice,
15
+ provided that you also meet, for each linked independent module, the
16
+ terms and conditions of the license of that module. An independent
17
+ module is a module which is not derived from or based on this library.
18
+ If you modify this library, you must extend this exception to your
19
+ version of the library.
20
+
21
+ libzmq is distributed in the hope that it will be useful, but WITHOUT
22
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
24
+ License for more details.
25
+
26
+ You should have received a copy of the GNU Lesser General Public License
27
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
28
+ */
29
+
30
+ #ifndef __ZMQ_ZAP_CLIENT_HPP_INCLUDED__
31
+ #define __ZMQ_ZAP_CLIENT_HPP_INCLUDED__
32
+
33
+ #include "mechanism_base.hpp"
34
+
35
+ namespace zmq
36
+ {
37
+ class zap_client_t : public virtual mechanism_base_t
38
+ {
39
+ public:
40
+ zap_client_t (session_base_t *const session_,
41
+ const std::string &peer_address_,
42
+ const options_t &options_);
43
+
44
+ void send_zap_request (const char *mechanism,
45
+ size_t mechanism_length,
46
+ const uint8_t *credentials,
47
+ size_t credentials_size);
48
+
49
+ void send_zap_request (const char *mechanism,
50
+ size_t mechanism_length,
51
+ const uint8_t **credentials,
52
+ size_t *credentials_sizes,
53
+ size_t credentials_count);
54
+
55
+ virtual int receive_and_process_zap_reply ();
56
+ virtual void handle_zap_status_code ();
57
+ protected:
58
+ const std::string peer_address;
59
+
60
+ // Status code as received from ZAP handler
61
+ std::string status_code;
62
+ };
63
+
64
+ class zap_client_common_handshake_t : public zap_client_t
65
+ {
66
+ protected:
67
+ enum state_t
68
+ {
69
+ waiting_for_hello,
70
+ sending_welcome,
71
+ waiting_for_initiate,
72
+ waiting_for_zap_reply,
73
+ sending_ready,
74
+ sending_error,
75
+ error_sent,
76
+ ready
77
+ };
78
+
79
+ zap_client_common_handshake_t (session_base_t *const session_,
80
+ const std::string &peer_address_,
81
+ const options_t &options_,
82
+ state_t zap_reply_ok_state);
83
+
84
+ // methods from mechanism_t
85
+ status_t status () const;
86
+ int zap_msg_available ();
87
+
88
+ // zap_client_t methods
89
+ int receive_and_process_zap_reply ();
90
+ void handle_zap_status_code ();
91
+
92
+ // Current FSM state
93
+ state_t state;
94
+
95
+ private:
96
+ const state_t zap_reply_ok_state;
97
+ };
98
+ }
99
+
100
+ #endif
@@ -0,0 +1,1527 @@
1
+ /*
2
+ Copyright (c) 2007-2016 Contributors as noted in the AUTHORS file
3
+
4
+ This file is part of libzmq, the ZeroMQ core engine in C++.
5
+
6
+ libzmq is free software; you can redistribute it and/or modify it under
7
+ the terms of the GNU Lesser General Public License (LGPL) as published
8
+ by the Free Software Foundation; either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ As a special exception, the Contributors give you permission to link
12
+ this library with independent modules to produce an executable,
13
+ regardless of the license terms of these independent modules, and to
14
+ copy and distribute the resulting executable under terms of your choice,
15
+ provided that you also meet, for each linked independent module, the
16
+ terms and conditions of the license of that module. An independent
17
+ module is a module which is not derived from or based on this library.
18
+ If you modify this library, you must extend this exception to your
19
+ version of the library.
20
+
21
+ libzmq is distributed in the hope that it will be useful, but WITHOUT
22
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
24
+ License for more details.
25
+
26
+ You should have received a copy of the GNU Lesser General Public License
27
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
28
+ */
29
+
30
+ // "Tell them I was a writer.
31
+ // A maker of software.
32
+ // A humanist. A father.
33
+ // And many things.
34
+ // But above all, a writer.
35
+ // Thank You. :)"
36
+ // - Pieter Hintjens
37
+
38
+ #include "precompiled.hpp"
39
+ #define ZMQ_TYPE_UNSAFE
40
+
41
+ #include "macros.hpp"
42
+ #include "poller.hpp"
43
+
44
+ // On AIX platform, poll.h has to be included first to get consistent
45
+ // definition of pollfd structure (AIX uses 'reqevents' and 'retnevents'
46
+ // instead of 'events' and 'revents' and defines macros to map from POSIX-y
47
+ // names to AIX-specific names).
48
+ #if defined ZMQ_POLL_BASED_ON_POLL && !defined ZMQ_HAVE_WINDOWS
49
+ #include <poll.h>
50
+ #endif
51
+
52
+ // TODO: determine if this is an issue, since zmq.h is being loaded from pch.
53
+ // zmq.h must be included *after* poll.h for AIX to build properly
54
+ //#include "../include/zmq.h"
55
+
56
+ #if !defined ZMQ_HAVE_WINDOWS
57
+ #include <unistd.h>
58
+ #endif
59
+
60
+ // XSI vector I/O
61
+ #if defined ZMQ_HAVE_UIO
62
+ #include <sys/uio.h>
63
+ #else
64
+ struct iovec {
65
+ void *iov_base;
66
+ size_t iov_len;
67
+ };
68
+ #endif
69
+
70
+ #include <string.h>
71
+ #include <stdlib.h>
72
+ #include <new>
73
+ #include <climits>
74
+
75
+ #include "proxy.hpp"
76
+ #include "socket_base.hpp"
77
+ #include "stdint.hpp"
78
+ #include "config.hpp"
79
+ #include "likely.hpp"
80
+ #include "clock.hpp"
81
+ #include "ctx.hpp"
82
+ #include "err.hpp"
83
+ #include "msg.hpp"
84
+ #include "fd.hpp"
85
+ #include "metadata.hpp"
86
+ #include "signaler.hpp"
87
+ #include "socket_poller.hpp"
88
+ #include "timers.hpp"
89
+
90
+ #if defined ZMQ_HAVE_OPENPGM
91
+ #define __PGM_WININT_H__
92
+ #include <pgm/pgm.h>
93
+ #endif
94
+
95
+ // Compile time check whether msg_t fits into zmq_msg_t.
96
+ typedef char check_msg_t_size
97
+ [sizeof (zmq::msg_t) == sizeof (zmq_msg_t) ? 1 : -1];
98
+
99
+
100
+ void zmq_version (int *major_, int *minor_, int *patch_)
101
+ {
102
+ *major_ = ZMQ_VERSION_MAJOR;
103
+ *minor_ = ZMQ_VERSION_MINOR;
104
+ *patch_ = ZMQ_VERSION_PATCH;
105
+ }
106
+
107
+
108
+ const char *zmq_strerror (int errnum_)
109
+ {
110
+ return zmq::errno_to_string (errnum_);
111
+ }
112
+
113
+ int zmq_errno (void)
114
+ {
115
+ return errno;
116
+ }
117
+
118
+
119
+ // New context API
120
+
121
+ void *zmq_ctx_new (void)
122
+ {
123
+ #if defined ZMQ_HAVE_OPENPGM
124
+
125
+ // Init PGM transport. Ensure threading and timer are enabled. Find PGM
126
+ // protocol ID. Note that if you want to use gettimeofday and sleep for
127
+ // openPGM timing, set environment variables PGM_TIMER to "GTOD" and
128
+ // PGM_SLEEP to "USLEEP".
129
+ pgm_error_t *pgm_error = NULL;
130
+ const bool ok = pgm_init (&pgm_error);
131
+ if (ok != TRUE) {
132
+
133
+ // Invalid parameters don't set pgm_error_t
134
+ zmq_assert (pgm_error != NULL);
135
+ if (pgm_error->domain == PGM_ERROR_DOMAIN_TIME && (
136
+ pgm_error->code == PGM_ERROR_FAILED)) {
137
+
138
+ // Failed to access RTC or HPET device.
139
+ pgm_error_free (pgm_error);
140
+ errno = EINVAL;
141
+ return NULL;
142
+ }
143
+
144
+ // PGM_ERROR_DOMAIN_ENGINE: WSAStartup errors or missing WSARecvMsg.
145
+ zmq_assert (false);
146
+ }
147
+ #endif
148
+
149
+ #ifdef ZMQ_HAVE_WINDOWS
150
+ // Intialise Windows sockets. Note that WSAStartup can be called multiple
151
+ // times given that WSACleanup will be called for each WSAStartup.
152
+ // We do this before the ctx constructor since its embedded mailbox_t
153
+ // object needs Winsock to be up and running.
154
+ WORD version_requested = MAKEWORD (2, 2);
155
+ WSADATA wsa_data;
156
+ int rc = WSAStartup (version_requested, &wsa_data);
157
+ zmq_assert (rc == 0);
158
+ zmq_assert (LOBYTE (wsa_data.wVersion) == 2 &&
159
+ HIBYTE (wsa_data.wVersion) == 2);
160
+ #endif
161
+
162
+ // Create 0MQ context.
163
+ zmq::ctx_t *ctx = new (std::nothrow) zmq::ctx_t;
164
+ alloc_assert (ctx);
165
+ return ctx;
166
+ }
167
+
168
+ int zmq_ctx_term (void *ctx_)
169
+ {
170
+ if (!ctx_ || !((zmq::ctx_t *) ctx_)->check_tag ()) {
171
+ errno = EFAULT;
172
+ return -1;
173
+ }
174
+
175
+ int rc = ((zmq::ctx_t *) ctx_)->terminate ();
176
+ int en = errno;
177
+
178
+ // Shut down only if termination was not interrupted by a signal.
179
+ if (!rc || en != EINTR) {
180
+ #ifdef ZMQ_HAVE_WINDOWS
181
+ // On Windows, uninitialise socket layer.
182
+ rc = WSACleanup ();
183
+ wsa_assert (rc != SOCKET_ERROR);
184
+ #endif
185
+
186
+ #if defined ZMQ_HAVE_OPENPGM
187
+ // Shut down the OpenPGM library.
188
+ if (pgm_shutdown () != TRUE)
189
+ zmq_assert (false);
190
+ #endif
191
+ }
192
+
193
+ errno = en;
194
+ return rc;
195
+ }
196
+
197
+ int zmq_ctx_shutdown (void *ctx_)
198
+ {
199
+ if (!ctx_ || !((zmq::ctx_t *) ctx_)->check_tag ()) {
200
+ errno = EFAULT;
201
+ return -1;
202
+ }
203
+ return ((zmq::ctx_t *) ctx_)->shutdown ();
204
+ }
205
+
206
+ int zmq_ctx_set (void *ctx_, int option_, int optval_)
207
+ {
208
+ if (!ctx_ || !((zmq::ctx_t *) ctx_)->check_tag ()) {
209
+ errno = EFAULT;
210
+ return -1;
211
+ }
212
+ return ((zmq::ctx_t *) ctx_)->set (option_, optval_);
213
+ }
214
+
215
+ int zmq_ctx_get (void *ctx_, int option_)
216
+ {
217
+ if (!ctx_ || !((zmq::ctx_t *) ctx_)->check_tag ()) {
218
+ errno = EFAULT;
219
+ return -1;
220
+ }
221
+ return ((zmq::ctx_t *) ctx_)->get (option_);
222
+ }
223
+
224
+ // Stable/legacy context API
225
+
226
+ void *zmq_init (int io_threads_)
227
+ {
228
+ if (io_threads_ >= 0) {
229
+ void *ctx = zmq_ctx_new ();
230
+ zmq_ctx_set (ctx, ZMQ_IO_THREADS, io_threads_);
231
+ return ctx;
232
+ }
233
+ errno = EINVAL;
234
+ return NULL;
235
+ }
236
+
237
+ int zmq_term (void *ctx_)
238
+ {
239
+ return zmq_ctx_term (ctx_);
240
+ }
241
+
242
+ int zmq_ctx_destroy (void *ctx_)
243
+ {
244
+ return zmq_ctx_term (ctx_);
245
+ }
246
+
247
+
248
+ // Sockets
249
+
250
+ static zmq::socket_base_t *as_socket_base_t (void *s_)
251
+ {
252
+ zmq::socket_base_t *s = static_cast<zmq::socket_base_t *> (s_);
253
+ if (!s_ || !s->check_tag ()) {
254
+ errno = ENOTSOCK;
255
+ return NULL;
256
+ }
257
+ return s;
258
+ }
259
+
260
+ void *zmq_socket (void *ctx_, int type_)
261
+ {
262
+ if (!ctx_ || !((zmq::ctx_t *) ctx_)->check_tag ()) {
263
+ errno = EFAULT;
264
+ return NULL;
265
+ }
266
+ zmq::ctx_t *ctx = (zmq::ctx_t *) ctx_;
267
+ zmq::socket_base_t *s = ctx->create_socket (type_);
268
+ return (void *) s;
269
+ }
270
+
271
+ int zmq_close (void *s_)
272
+ {
273
+ zmq::socket_base_t *s = as_socket_base_t (s_);
274
+ if (!s)
275
+ return -1;
276
+ s->close ();
277
+ return 0;
278
+ }
279
+
280
+ int zmq_setsockopt (void *s_, int option_, const void *optval_,
281
+ size_t optvallen_)
282
+ {
283
+ zmq::socket_base_t *s = as_socket_base_t (s_);
284
+ if (!s)
285
+ return -1;
286
+ return s->setsockopt (option_, optval_, optvallen_);
287
+ }
288
+
289
+ int zmq_getsockopt (void *s_, int option_, void *optval_, size_t *optvallen_)
290
+ {
291
+ zmq::socket_base_t *s = as_socket_base_t (s_);
292
+ if (!s)
293
+ return -1;
294
+ return s->getsockopt (option_, optval_, optvallen_);
295
+ }
296
+
297
+ int zmq_socket_monitor (void *s_, const char *addr_, int events_)
298
+ {
299
+ zmq::socket_base_t *s = as_socket_base_t (s_);
300
+ if (!s)
301
+ return -1;
302
+ return s->monitor (addr_, events_);
303
+ }
304
+
305
+ int zmq_join (void *s_, const char* group_)
306
+ {
307
+ zmq::socket_base_t *s = as_socket_base_t (s_);
308
+ if (!s)
309
+ return -1;
310
+ return s->join (group_);
311
+ }
312
+
313
+ int zmq_leave (void *s_, const char* group_)
314
+ {
315
+ zmq::socket_base_t *s = as_socket_base_t (s_);
316
+ if (!s)
317
+ return -1;
318
+ return s->leave (group_);
319
+ }
320
+
321
+ int zmq_bind (void *s_, const char *addr_)
322
+ {
323
+ zmq::socket_base_t *s = as_socket_base_t (s_);
324
+ if (!s)
325
+ return -1;
326
+ return s->bind (addr_);
327
+ }
328
+
329
+ int zmq_connect (void *s_, const char *addr_)
330
+ {
331
+ zmq::socket_base_t *s = as_socket_base_t (s_);
332
+ if (!s)
333
+ return -1;
334
+ return s->connect (addr_);
335
+ }
336
+
337
+ int zmq_unbind (void *s_, const char *addr_)
338
+ {
339
+ zmq::socket_base_t *s = as_socket_base_t (s_);
340
+ if (!s)
341
+ return -1;
342
+ return s->term_endpoint (addr_);
343
+ }
344
+
345
+ int zmq_disconnect (void *s_, const char *addr_)
346
+ {
347
+ zmq::socket_base_t *s = as_socket_base_t (s_);
348
+ if (!s)
349
+ return -1;
350
+ return s->term_endpoint (addr_);
351
+ }
352
+
353
+ // Sending functions.
354
+
355
+ static inline int
356
+ s_sendmsg (zmq::socket_base_t *s_, zmq_msg_t *msg_, int flags_)
357
+ {
358
+ size_t sz = zmq_msg_size (msg_);
359
+ int rc = s_->send ((zmq::msg_t *) msg_, flags_);
360
+ if (unlikely (rc < 0))
361
+ return -1;
362
+
363
+ // This is what I'd like to do, my C++ fu is too weak -- PH 2016/02/09
364
+ // int max_msgsz = s_->parent->get (ZMQ_MAX_MSGSZ);
365
+ size_t max_msgsz = INT_MAX;
366
+
367
+ // Truncate returned size to INT_MAX to avoid overflow to negative values
368
+ return (int) (sz < max_msgsz? sz: max_msgsz);
369
+ }
370
+
371
+ /* To be deprecated once zmq_msg_send() is stable */
372
+ int zmq_sendmsg (void *s_, zmq_msg_t *msg_, int flags_)
373
+ {
374
+ return zmq_msg_send (msg_, s_, flags_);
375
+ }
376
+
377
+ int zmq_send (void *s_, const void *buf_, size_t len_, int flags_)
378
+ {
379
+ zmq::socket_base_t *s = as_socket_base_t (s_);
380
+ if (!s)
381
+ return -1;
382
+ zmq_msg_t msg;
383
+ if (zmq_msg_init_size (&msg, len_))
384
+ return -1;
385
+
386
+ // We explicitly allow a send from NULL, size zero
387
+ if (len_) {
388
+ assert (buf_);
389
+ memcpy (zmq_msg_data (&msg), buf_, len_);
390
+ }
391
+ int rc = s_sendmsg (s, &msg, flags_);
392
+ if (unlikely (rc < 0)) {
393
+ int err = errno;
394
+ int rc2 = zmq_msg_close (&msg);
395
+ errno_assert (rc2 == 0);
396
+ errno = err;
397
+ return -1;
398
+ }
399
+ // Note the optimisation here. We don't close the msg object as it is
400
+ // empty anyway. This may change when implementation of zmq_msg_t changes.
401
+ return rc;
402
+ }
403
+
404
+ int zmq_send_const (void *s_, const void *buf_, size_t len_, int flags_)
405
+ {
406
+ zmq::socket_base_t *s = as_socket_base_t (s_);
407
+ if (!s)
408
+ return -1;
409
+ zmq_msg_t msg;
410
+ int rc = zmq_msg_init_data (&msg, (void *)buf_, len_, NULL, NULL);
411
+ if (rc != 0)
412
+ return -1;
413
+
414
+ rc = s_sendmsg (s, &msg, flags_);
415
+ if (unlikely (rc < 0)) {
416
+ int err = errno;
417
+ int rc2 = zmq_msg_close (&msg);
418
+ errno_assert (rc2 == 0);
419
+ errno = err;
420
+ return -1;
421
+ }
422
+ // Note the optimisation here. We don't close the msg object as it is
423
+ // empty anyway. This may change when implementation of zmq_msg_t changes.
424
+ return rc;
425
+ }
426
+
427
+
428
+ // Send multiple messages.
429
+ // TODO: this function has no man page
430
+ //
431
+ // If flag bit ZMQ_SNDMORE is set the vector is treated as
432
+ // a single multi-part message, i.e. the last message has
433
+ // ZMQ_SNDMORE bit switched off.
434
+ //
435
+ int zmq_sendiov (void *s_, iovec *a_, size_t count_, int flags_)
436
+ {
437
+ zmq::socket_base_t *s = as_socket_base_t (s_);
438
+ if (!s)
439
+ return -1;
440
+ if (unlikely (count_ <= 0 || !a_)) {
441
+ errno = EINVAL;
442
+ return -1;
443
+ }
444
+
445
+ int rc = 0;
446
+ zmq_msg_t msg;
447
+
448
+ for (size_t i = 0; i < count_; ++i) {
449
+ rc = zmq_msg_init_size (&msg, a_[i].iov_len);
450
+ if (rc != 0) {
451
+ rc = -1;
452
+ break;
453
+ }
454
+ memcpy (zmq_msg_data (&msg), a_[i].iov_base, a_[i].iov_len);
455
+ if (i == count_ - 1)
456
+ flags_ = flags_ & ~ZMQ_SNDMORE;
457
+ rc = s_sendmsg (s, &msg, flags_);
458
+ if (unlikely (rc < 0)) {
459
+ int err = errno;
460
+ int rc2 = zmq_msg_close (&msg);
461
+ errno_assert (rc2 == 0);
462
+ errno = err;
463
+ rc = -1;
464
+ break;
465
+ }
466
+ }
467
+ return rc;
468
+ }
469
+
470
+ // Receiving functions.
471
+
472
+ static int
473
+ s_recvmsg (zmq::socket_base_t *s_, zmq_msg_t *msg_, int flags_)
474
+ {
475
+ int rc = s_->recv ((zmq::msg_t *) msg_, flags_);
476
+ if (unlikely (rc < 0))
477
+ return -1;
478
+
479
+ // Truncate returned size to INT_MAX to avoid overflow to negative values
480
+ size_t sz = zmq_msg_size (msg_);
481
+ return (int) (sz < INT_MAX? sz: INT_MAX);
482
+ }
483
+
484
+ /* To be deprecated once zmq_msg_recv() is stable */
485
+ int zmq_recvmsg (void *s_, zmq_msg_t *msg_, int flags_)
486
+ {
487
+ return zmq_msg_recv (msg_, s_, flags_);
488
+ }
489
+
490
+
491
+ int zmq_recv (void *s_, void *buf_, size_t len_, int flags_)
492
+ {
493
+ zmq::socket_base_t *s = as_socket_base_t (s_);
494
+ if (!s)
495
+ return -1;
496
+ zmq_msg_t msg;
497
+ int rc = zmq_msg_init (&msg);
498
+ errno_assert (rc == 0);
499
+
500
+ int nbytes = s_recvmsg (s, &msg, flags_);
501
+ if (unlikely (nbytes < 0)) {
502
+ int err = errno;
503
+ rc = zmq_msg_close (&msg);
504
+ errno_assert (rc == 0);
505
+ errno = err;
506
+ return -1;
507
+ }
508
+
509
+ // An oversized message is silently truncated.
510
+ size_t to_copy = size_t (nbytes) < len_ ? size_t (nbytes) : len_;
511
+
512
+ // We explicitly allow a null buffer argument if len is zero
513
+ if (to_copy) {
514
+ assert (buf_);
515
+ memcpy (buf_, zmq_msg_data (&msg), to_copy);
516
+ }
517
+ rc = zmq_msg_close (&msg);
518
+ errno_assert (rc == 0);
519
+
520
+ return nbytes;
521
+ }
522
+
523
+ // Receive a multi-part message
524
+ //
525
+ // Receives up to *count_ parts of a multi-part message.
526
+ // Sets *count_ to the actual number of parts read.
527
+ // ZMQ_RCVMORE is set to indicate if a complete multi-part message was read.
528
+ // Returns number of message parts read, or -1 on error.
529
+ //
530
+ // Note: even if -1 is returned, some parts of the message
531
+ // may have been read. Therefore the client must consult
532
+ // *count_ to retrieve message parts successfully read,
533
+ // even if -1 is returned.
534
+ //
535
+ // The iov_base* buffers of each iovec *a_ filled in by this
536
+ // function may be freed using free().
537
+ // TODO: this function has no man page
538
+ //
539
+ int zmq_recviov (void *s_, iovec *a_, size_t *count_, int flags_)
540
+ {
541
+ zmq::socket_base_t *s = as_socket_base_t (s_);
542
+ if (!s)
543
+ return -1;
544
+ if (unlikely (!count_ || *count_ <= 0 || !a_)) {
545
+ errno = EINVAL;
546
+ return -1;
547
+ }
548
+
549
+ size_t count = *count_;
550
+ int nread = 0;
551
+ bool recvmore = true;
552
+
553
+ *count_ = 0;
554
+
555
+ for (size_t i = 0; recvmore && i < count; ++i) {
556
+
557
+ zmq_msg_t msg;
558
+ int rc = zmq_msg_init (&msg);
559
+ errno_assert (rc == 0);
560
+
561
+ int nbytes = s_recvmsg (s, &msg, flags_);
562
+ if (unlikely (nbytes < 0)) {
563
+ int err = errno;
564
+ rc = zmq_msg_close (&msg);
565
+ errno_assert (rc == 0);
566
+ errno = err;
567
+ nread = -1;
568
+ break;
569
+ }
570
+
571
+ a_[i].iov_len = zmq_msg_size (&msg);
572
+ a_[i].iov_base = static_cast<char *> (malloc(a_[i].iov_len));
573
+ if (unlikely (!a_[i].iov_base)) {
574
+ errno = ENOMEM;
575
+ return -1;
576
+ }
577
+ memcpy(a_[i].iov_base,static_cast<char *> (zmq_msg_data (&msg)),
578
+ a_[i].iov_len);
579
+ // Assume zmq_socket ZMQ_RVCMORE is properly set.
580
+ zmq::msg_t* p_msg = reinterpret_cast<zmq::msg_t*>(&msg);
581
+ recvmore = p_msg->flags() & zmq::msg_t::more;
582
+ rc = zmq_msg_close(&msg);
583
+ errno_assert (rc == 0);
584
+ ++*count_;
585
+ ++nread;
586
+ }
587
+ return nread;
588
+ }
589
+
590
+ // Message manipulators.
591
+
592
+ int zmq_msg_init (zmq_msg_t *msg_)
593
+ {
594
+ return ((zmq::msg_t*) msg_)->init ();
595
+ }
596
+
597
+ int zmq_msg_init_size (zmq_msg_t *msg_, size_t size_)
598
+ {
599
+ return ((zmq::msg_t*) msg_)->init_size (size_);
600
+ }
601
+
602
+ int zmq_msg_init_data (zmq_msg_t *msg_, void *data_, size_t size_,
603
+ zmq_free_fn *ffn_, void *hint_)
604
+ {
605
+ return ((zmq::msg_t*) msg_)->init_data (data_, size_, ffn_, hint_);
606
+ }
607
+
608
+ int zmq_msg_send (zmq_msg_t *msg_, void *s_, int flags_)
609
+ {
610
+ zmq::socket_base_t *s = as_socket_base_t (s_);
611
+ if (!s)
612
+ return -1;
613
+ return s_sendmsg (s, msg_, flags_);
614
+ }
615
+
616
+ int zmq_msg_recv (zmq_msg_t *msg_, void *s_, int flags_)
617
+ {
618
+ zmq::socket_base_t *s = as_socket_base_t (s_);
619
+ if (!s)
620
+ return -1;
621
+ return s_recvmsg (s, msg_, flags_);
622
+ }
623
+
624
+ int zmq_msg_close (zmq_msg_t *msg_)
625
+ {
626
+ return ((zmq::msg_t*) msg_)->close ();
627
+ }
628
+
629
+ int zmq_msg_move (zmq_msg_t *dest_, zmq_msg_t *src_)
630
+ {
631
+ return ((zmq::msg_t*) dest_)->move (*(zmq::msg_t*) src_);
632
+ }
633
+
634
+ int zmq_msg_copy (zmq_msg_t *dest_, zmq_msg_t *src_)
635
+ {
636
+ return ((zmq::msg_t*) dest_)->copy (*(zmq::msg_t*) src_);
637
+ }
638
+
639
+ void *zmq_msg_data (zmq_msg_t *msg_)
640
+ {
641
+ return ((zmq::msg_t*) msg_)->data ();
642
+ }
643
+
644
+ size_t zmq_msg_size (const zmq_msg_t *msg_)
645
+ {
646
+ return ((zmq::msg_t*) msg_)->size ();
647
+ }
648
+
649
+ int zmq_msg_more (const zmq_msg_t *msg_)
650
+ {
651
+ return zmq_msg_get (msg_, ZMQ_MORE);
652
+ }
653
+
654
+ int zmq_msg_get (const zmq_msg_t *msg_, int property_)
655
+ {
656
+ const char* fd_string;
657
+
658
+ switch (property_) {
659
+ case ZMQ_MORE:
660
+ return (((zmq::msg_t*) msg_)->flags () & zmq::msg_t::more)? 1: 0;
661
+ case ZMQ_SRCFD:
662
+ fd_string = zmq_msg_gets(msg_, "__fd");
663
+ if (fd_string == NULL)
664
+ return (int)-1;
665
+
666
+ return atoi(fd_string);
667
+ case ZMQ_SHARED:
668
+ return (((zmq::msg_t*) msg_)->is_cmsg ()) ||
669
+ (((zmq::msg_t*) msg_)->flags () & zmq::msg_t::shared)? 1: 0;
670
+ default:
671
+ errno = EINVAL;
672
+ return -1;
673
+ }
674
+ }
675
+
676
+ int zmq_msg_set (zmq_msg_t *, int, int)
677
+ {
678
+ // No properties supported at present
679
+ errno = EINVAL;
680
+ return -1;
681
+ }
682
+
683
+ int zmq_msg_set_routing_id (zmq_msg_t *msg_, uint32_t routing_id_)
684
+ {
685
+ return ((zmq::msg_t *) msg_)->set_routing_id (routing_id_);
686
+ }
687
+
688
+ uint32_t zmq_msg_routing_id (zmq_msg_t *msg_)
689
+ {
690
+ return ((zmq::msg_t *) msg_)->get_routing_id ();
691
+ }
692
+
693
+ int zmq_msg_set_group (zmq_msg_t *msg_, const char *group_)
694
+ {
695
+ return ((zmq::msg_t *) msg_)->set_group (group_);
696
+ }
697
+
698
+ const char *zmq_msg_group (zmq_msg_t *msg_)
699
+ {
700
+ return ((zmq::msg_t *) msg_)->group ();
701
+ }
702
+
703
+ // Get message metadata string
704
+
705
+ const char *zmq_msg_gets (const zmq_msg_t *msg_, const char *property_)
706
+ {
707
+ zmq::metadata_t *metadata = ((zmq::msg_t *) msg_)->metadata ();
708
+ const char *value = NULL;
709
+ if (metadata)
710
+ value = metadata->get (std::string (property_));
711
+ if (value)
712
+ return value;
713
+ else {
714
+ errno = EINVAL;
715
+ return NULL;
716
+ }
717
+ }
718
+
719
+ // Polling.
720
+
721
+ #if defined ZMQ_HAVE_POLLER
722
+ inline int zmq_poller_poll (zmq_pollitem_t *items_, int nitems_, long timeout_)
723
+ {
724
+ // implement zmq_poll on top of zmq_poller
725
+ int rc;
726
+ zmq_poller_event_t *events;
727
+ zmq::socket_poller_t poller;
728
+ events = new (std::nothrow) zmq_poller_event_t[nitems_];
729
+ alloc_assert(events);
730
+
731
+ bool repeat_items = false;
732
+ // Register sockets with poller
733
+ for (int i = 0; i < nitems_; i++) {
734
+ items_[i].revents = 0;
735
+
736
+ bool modify = false;
737
+ short e = items_[i].events;
738
+ if (items_[i].socket) {
739
+ // Poll item is a 0MQ socket.
740
+ for (int j = 0; j < i; ++j) {
741
+ // Check for repeat entries
742
+ if (items_[j].socket == items_[i].socket) {
743
+ repeat_items = true;
744
+ modify = true;
745
+ e |= items_[j].events;
746
+ }
747
+ }
748
+ if (modify) {
749
+ rc = zmq_poller_modify (&poller, items_[i].socket, e);
750
+ } else {
751
+ rc = zmq_poller_add (&poller, items_[i].socket, NULL, e);
752
+ }
753
+ if (rc < 0) {
754
+ delete [] events;
755
+ return rc;
756
+ }
757
+ } else {
758
+ // Poll item is a raw file descriptor.
759
+ for (int j = 0; j < i; ++j) {
760
+ // Check for repeat entries
761
+ if (!items_[j].socket && items_[j].fd == items_[i].fd) {
762
+ repeat_items = true;
763
+ modify = true;
764
+ e |= items_[j].events;
765
+ }
766
+ }
767
+ if (modify) {
768
+ rc = zmq_poller_modify_fd (&poller, items_[i].fd, e);
769
+ } else {
770
+ rc = zmq_poller_add_fd (&poller, items_[i].fd, NULL, e);
771
+ }
772
+ if (rc < 0) {
773
+ delete [] events;
774
+ return rc;
775
+ }
776
+ }
777
+ }
778
+
779
+ // Wait for events
780
+ rc = zmq_poller_wait_all (&poller, events, nitems_, timeout_);
781
+ if (rc < 0) {
782
+ delete [] events;
783
+ if (zmq_errno() == EAGAIN) {
784
+ return 0;
785
+ }
786
+ return rc;
787
+ }
788
+
789
+ // Transform poller events into zmq_pollitem events.
790
+ // items_ contains all items, while events only contains fired events.
791
+ // If no sockets are repeated (likely), the two are still co-ordered, so step through the items
792
+ // checking for matches only on the first event.
793
+ // If there are repeat items, they cannot be assumed to be co-ordered,
794
+ // so each pollitem must check fired events from the beginning.
795
+ int j_start = 0, found_events = rc;
796
+ for (int i = 0; i < nitems_; i++) {
797
+ for (int j = j_start; j < found_events; ++j) {
798
+ if (
799
+ (items_[i].socket && items_[i].socket == events[j].socket) ||
800
+ (!(items_[i].socket || events[j].socket) && items_[i].fd == events[j].fd)
801
+ ) {
802
+ items_[i].revents = events[j].events & items_[i].events;
803
+ if (!repeat_items) {
804
+ // no repeats, we can ignore events we've already seen
805
+ j_start++;
806
+ }
807
+ break;
808
+ }
809
+ if (!repeat_items) {
810
+ // no repeats, never have to look at j > j_start
811
+ break;
812
+ }
813
+ }
814
+ }
815
+
816
+ // Cleanup
817
+ delete [] events;
818
+ return rc;
819
+ }
820
+ #endif // ZMQ_HAVE_POLLER
821
+
822
+ int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_)
823
+ {
824
+ // TODO: the function implementation can just call zmq_pollfd_poll with
825
+ // pollfd as NULL, however pollfd is not yet stable.
826
+ #if defined ZMQ_HAVE_POLLER
827
+ // if poller is present, use that.
828
+ return zmq_poller_poll(items_, nitems_, timeout_);
829
+ #else
830
+ #if defined ZMQ_POLL_BASED_ON_POLL
831
+ if (unlikely (nitems_ < 0)) {
832
+ errno = EINVAL;
833
+ return -1;
834
+ }
835
+ if (unlikely (nitems_ == 0)) {
836
+ if (timeout_ == 0)
837
+ return 0;
838
+ #if defined ZMQ_HAVE_WINDOWS
839
+ Sleep (timeout_ > 0 ? timeout_ : INFINITE);
840
+ return 0;
841
+ #elif defined ZMQ_HAVE_ANDROID
842
+ usleep (timeout_ * 1000);
843
+ return 0;
844
+ #else
845
+ return usleep (timeout_ * 1000);
846
+ #endif
847
+ }
848
+
849
+ if (!items_) {
850
+ errno = EFAULT;
851
+ return -1;
852
+ }
853
+
854
+ zmq::clock_t clock;
855
+ uint64_t now = 0;
856
+ uint64_t end = 0;
857
+ pollfd spollfds[ZMQ_POLLITEMS_DFLT];
858
+ pollfd *pollfds = spollfds;
859
+
860
+ if (nitems_ > ZMQ_POLLITEMS_DFLT) {
861
+ pollfds = (pollfd*) malloc (nitems_ * sizeof (pollfd));
862
+ alloc_assert (pollfds);
863
+ }
864
+
865
+ // Build pollset for poll () system call.
866
+ for (int i = 0; i != nitems_; i++) {
867
+
868
+ // If the poll item is a 0MQ socket, we poll on the file descriptor
869
+ // retrieved by the ZMQ_FD socket option.
870
+ if (items_ [i].socket) {
871
+ size_t zmq_fd_size = sizeof (zmq::fd_t);
872
+ if (zmq_getsockopt (items_ [i].socket, ZMQ_FD, &pollfds [i].fd,
873
+ &zmq_fd_size) == -1) {
874
+ if (pollfds != spollfds)
875
+ free (pollfds);
876
+ return -1;
877
+ }
878
+ pollfds [i].events = items_ [i].events ? POLLIN : 0;
879
+ }
880
+ // Else, the poll item is a raw file descriptor. Just convert the
881
+ // events to normal POLLIN/POLLOUT for poll ().
882
+ else {
883
+ pollfds [i].fd = items_ [i].fd;
884
+ pollfds [i].events =
885
+ (items_ [i].events & ZMQ_POLLIN ? POLLIN : 0) |
886
+ (items_ [i].events & ZMQ_POLLOUT ? POLLOUT : 0) |
887
+ (items_ [i].events & ZMQ_POLLPRI ? POLLPRI : 0);
888
+ }
889
+ }
890
+
891
+ bool first_pass = true;
892
+ int nevents = 0;
893
+
894
+ while (true) {
895
+ // Compute the timeout for the subsequent poll.
896
+ int timeout;
897
+ if (first_pass)
898
+ timeout = 0;
899
+ else
900
+ if (timeout_ < 0)
901
+ timeout = -1;
902
+ else
903
+ timeout = end - now;
904
+
905
+ // Wait for events.
906
+ {
907
+ int rc = poll (pollfds, nitems_, timeout);
908
+ if (rc == -1 && errno == EINTR) {
909
+ if (pollfds != spollfds)
910
+ free (pollfds);
911
+ return -1;
912
+ }
913
+ errno_assert (rc >= 0);
914
+ }
915
+ // Check for the events.
916
+ for (int i = 0; i != nitems_; i++) {
917
+
918
+ items_ [i].revents = 0;
919
+
920
+ // The poll item is a 0MQ socket. Retrieve pending events
921
+ // using the ZMQ_EVENTS socket option.
922
+ if (items_ [i].socket) {
923
+ size_t zmq_events_size = sizeof (uint32_t);
924
+ uint32_t zmq_events;
925
+ if (zmq_getsockopt (items_ [i].socket, ZMQ_EVENTS, &zmq_events,
926
+ &zmq_events_size) == -1) {
927
+ if (pollfds != spollfds)
928
+ free (pollfds);
929
+ return -1;
930
+ }
931
+ if ((items_ [i].events & ZMQ_POLLOUT) &&
932
+ (zmq_events & ZMQ_POLLOUT))
933
+ items_ [i].revents |= ZMQ_POLLOUT;
934
+ if ((items_ [i].events & ZMQ_POLLIN) &&
935
+ (zmq_events & ZMQ_POLLIN))
936
+ items_ [i].revents |= ZMQ_POLLIN;
937
+ }
938
+ // Else, the poll item is a raw file descriptor, simply convert
939
+ // the events to zmq_pollitem_t-style format.
940
+ else {
941
+ if (pollfds [i].revents & POLLIN)
942
+ items_ [i].revents |= ZMQ_POLLIN;
943
+ if (pollfds [i].revents & POLLOUT)
944
+ items_ [i].revents |= ZMQ_POLLOUT;
945
+ if (pollfds [i].revents & POLLPRI)
946
+ items_ [i].revents |= ZMQ_POLLPRI;
947
+ if (pollfds [i].revents & ~(POLLIN | POLLOUT | POLLPRI))
948
+ items_ [i].revents |= ZMQ_POLLERR;
949
+ }
950
+
951
+ if (items_ [i].revents)
952
+ nevents++;
953
+ }
954
+
955
+ // If timeout is zero, exit immediately whether there are events or not.
956
+ if (timeout_ == 0)
957
+ break;
958
+
959
+ // If there are events to return, we can exit immediately.
960
+ if (nevents)
961
+ break;
962
+
963
+ // At this point we are meant to wait for events but there are none.
964
+ // If timeout is infinite we can just loop until we get some events.
965
+ if (timeout_ < 0) {
966
+ if (first_pass)
967
+ first_pass = false;
968
+ continue;
969
+ }
970
+
971
+ // The timeout is finite and there are no events. In the first pass
972
+ // we get a timestamp of when the polling have begun. (We assume that
973
+ // first pass have taken negligible time). We also compute the time
974
+ // when the polling should time out.
975
+ if (first_pass) {
976
+ now = clock.now_ms ();
977
+ end = now + timeout_;
978
+ if (now == end)
979
+ break;
980
+ first_pass = false;
981
+ continue;
982
+ }
983
+
984
+ // Find out whether timeout have expired.
985
+ now = clock.now_ms ();
986
+ if (now >= end)
987
+ break;
988
+ }
989
+
990
+ if (pollfds != spollfds)
991
+ free (pollfds);
992
+ return nevents;
993
+
994
+ #elif defined ZMQ_POLL_BASED_ON_SELECT
995
+
996
+ if (unlikely (nitems_ < 0)) {
997
+ errno = EINVAL;
998
+ return -1;
999
+ }
1000
+ if (unlikely (nitems_ == 0)) {
1001
+ if (timeout_ == 0)
1002
+ return 0;
1003
+ #if defined ZMQ_HAVE_WINDOWS
1004
+ Sleep (timeout_ > 0 ? timeout_ : INFINITE);
1005
+ return 0;
1006
+ #else
1007
+ return usleep (timeout_ * 1000);
1008
+ #endif
1009
+ }
1010
+ zmq::clock_t clock;
1011
+ uint64_t now = 0;
1012
+ uint64_t end = 0;
1013
+
1014
+ // Ensure we do not attempt to select () on more than FD_SETSIZE
1015
+ // file descriptors.
1016
+ zmq_assert (nitems_ <= FD_SETSIZE);
1017
+
1018
+ fd_set pollset_in;
1019
+ FD_ZERO (&pollset_in);
1020
+ fd_set pollset_out;
1021
+ FD_ZERO (&pollset_out);
1022
+ fd_set pollset_err;
1023
+ FD_ZERO (&pollset_err);
1024
+
1025
+ zmq::fd_t maxfd = 0;
1026
+
1027
+ // Build the fd_sets for passing to select ().
1028
+ for (int i = 0; i != nitems_; i++) {
1029
+
1030
+ // If the poll item is a 0MQ socket we are interested in input on the
1031
+ // notification file descriptor retrieved by the ZMQ_FD socket option.
1032
+ if (items_ [i].socket) {
1033
+ size_t zmq_fd_size = sizeof (zmq::fd_t);
1034
+ zmq::fd_t notify_fd;
1035
+ if (zmq_getsockopt (items_ [i].socket, ZMQ_FD, &notify_fd,
1036
+ &zmq_fd_size) == -1)
1037
+ return -1;
1038
+ if (items_ [i].events) {
1039
+ FD_SET (notify_fd, &pollset_in);
1040
+ if (maxfd < notify_fd)
1041
+ maxfd = notify_fd;
1042
+ }
1043
+ }
1044
+ // Else, the poll item is a raw file descriptor. Convert the poll item
1045
+ // events to the appropriate fd_sets.
1046
+ else {
1047
+ if (items_ [i].events & ZMQ_POLLIN)
1048
+ FD_SET (items_ [i].fd, &pollset_in);
1049
+ if (items_ [i].events & ZMQ_POLLOUT)
1050
+ FD_SET (items_ [i].fd, &pollset_out);
1051
+ if (items_ [i].events & ZMQ_POLLERR)
1052
+ FD_SET (items_ [i].fd, &pollset_err);
1053
+ if (maxfd < items_ [i].fd)
1054
+ maxfd = items_ [i].fd;
1055
+ }
1056
+ }
1057
+
1058
+ bool first_pass = true;
1059
+ int nevents = 0;
1060
+ fd_set inset, outset, errset;
1061
+
1062
+ while (true) {
1063
+
1064
+ // Compute the timeout for the subsequent poll.
1065
+ timeval timeout;
1066
+ timeval *ptimeout;
1067
+ if (first_pass) {
1068
+ timeout.tv_sec = 0;
1069
+ timeout.tv_usec = 0;
1070
+ ptimeout = &timeout;
1071
+ }
1072
+ else
1073
+ if (timeout_ < 0)
1074
+ ptimeout = NULL;
1075
+ else {
1076
+ timeout.tv_sec = (long) ((end - now) / 1000);
1077
+ timeout.tv_usec = (long) ((end - now) % 1000 * 1000);
1078
+ ptimeout = &timeout;
1079
+ }
1080
+
1081
+ // Wait for events. Ignore interrupts if there's infinite timeout.
1082
+ while (true) {
1083
+ #if defined ZMQ_HAVE_WINDOWS
1084
+ // On Windows we don't need to copy the whole fd_set.
1085
+ // SOCKETS are continuous from the beginning of fd_array in fd_set.
1086
+ // We just need to copy fd_count elements of fd_array.
1087
+ // We gain huge memcpy() improvement if number of used SOCKETs is much lower than FD_SETSIZE.
1088
+ memcpy (&inset, &pollset_in , (char *) (pollset_in.fd_array + pollset_in.fd_count ) - (char *) &pollset_in );
1089
+ memcpy (&outset, &pollset_out, (char *) (pollset_out.fd_array + pollset_out.fd_count) - (char *) &pollset_out);
1090
+ memcpy (&errset, &pollset_err, (char *) (pollset_err.fd_array + pollset_err.fd_count) - (char *) &pollset_err);
1091
+ int rc = select (0, &inset, &outset, &errset, ptimeout);
1092
+ if (unlikely (rc == SOCKET_ERROR)) {
1093
+ errno = zmq::wsa_error_to_errno (WSAGetLastError ());
1094
+ wsa_assert (errno == ENOTSOCK);
1095
+ return -1;
1096
+ }
1097
+ #else
1098
+ memcpy (&inset, &pollset_in, sizeof (fd_set));
1099
+ memcpy (&outset, &pollset_out, sizeof (fd_set));
1100
+ memcpy (&errset, &pollset_err, sizeof (fd_set));
1101
+ int rc = select (maxfd + 1, &inset, &outset, &errset, ptimeout);
1102
+ if (unlikely (rc == -1)) {
1103
+ errno_assert (errno == EINTR || errno == EBADF);
1104
+ return -1;
1105
+ }
1106
+ #endif
1107
+ break;
1108
+ }
1109
+
1110
+ // Check for the events.
1111
+ for (int i = 0; i != nitems_; i++) {
1112
+
1113
+ items_ [i].revents = 0;
1114
+
1115
+ // The poll item is a 0MQ socket. Retrieve pending events
1116
+ // using the ZMQ_EVENTS socket option.
1117
+ if (items_ [i].socket) {
1118
+ size_t zmq_events_size = sizeof (uint32_t);
1119
+ uint32_t zmq_events;
1120
+ if (zmq_getsockopt (items_ [i].socket, ZMQ_EVENTS, &zmq_events,
1121
+ &zmq_events_size) == -1)
1122
+ return -1;
1123
+ if ((items_ [i].events & ZMQ_POLLOUT) &&
1124
+ (zmq_events & ZMQ_POLLOUT))
1125
+ items_ [i].revents |= ZMQ_POLLOUT;
1126
+ if ((items_ [i].events & ZMQ_POLLIN) &&
1127
+ (zmq_events & ZMQ_POLLIN))
1128
+ items_ [i].revents |= ZMQ_POLLIN;
1129
+ }
1130
+ // Else, the poll item is a raw file descriptor, simply convert
1131
+ // the events to zmq_pollitem_t-style format.
1132
+ else {
1133
+ if (FD_ISSET (items_ [i].fd, &inset))
1134
+ items_ [i].revents |= ZMQ_POLLIN;
1135
+ if (FD_ISSET (items_ [i].fd, &outset))
1136
+ items_ [i].revents |= ZMQ_POLLOUT;
1137
+ if (FD_ISSET (items_ [i].fd, &errset))
1138
+ items_ [i].revents |= ZMQ_POLLERR;
1139
+ }
1140
+
1141
+ if (items_ [i].revents)
1142
+ nevents++;
1143
+ }
1144
+
1145
+ // If timeout is zero, exit immediately whether there are events or not.
1146
+ if (timeout_ == 0)
1147
+ break;
1148
+
1149
+ // If there are events to return, we can exit immediately.
1150
+ if (nevents)
1151
+ break;
1152
+
1153
+ // At this point we are meant to wait for events but there are none.
1154
+ // If timeout is infinite we can just loop until we get some events.
1155
+ if (timeout_ < 0) {
1156
+ if (first_pass)
1157
+ first_pass = false;
1158
+ continue;
1159
+ }
1160
+
1161
+ // The timeout is finite and there are no events. In the first pass
1162
+ // we get a timestamp of when the polling have begun. (We assume that
1163
+ // first pass have taken negligible time). We also compute the time
1164
+ // when the polling should time out.
1165
+ if (first_pass) {
1166
+ now = clock.now_ms ();
1167
+ end = now + timeout_;
1168
+ if (now == end)
1169
+ break;
1170
+ first_pass = false;
1171
+ continue;
1172
+ }
1173
+
1174
+ // Find out whether timeout have expired.
1175
+ now = clock.now_ms ();
1176
+ if (now >= end)
1177
+ break;
1178
+ }
1179
+
1180
+ return nevents;
1181
+
1182
+ #else
1183
+ // Exotic platforms that support neither poll() nor select().
1184
+ errno = ENOTSUP;
1185
+ return -1;
1186
+ #endif
1187
+ #endif // ZMQ_HAVE_POLLER
1188
+ }
1189
+
1190
+ // The poller functionality
1191
+
1192
+ void *zmq_poller_new (void)
1193
+ {
1194
+ zmq::socket_poller_t *poller = new (std::nothrow) zmq::socket_poller_t;
1195
+ alloc_assert (poller);
1196
+ return poller;
1197
+ }
1198
+
1199
+ int zmq_poller_destroy (void **poller_p_)
1200
+ {
1201
+ void *poller;
1202
+ if (!poller_p_ || !(poller = *poller_p_) ||
1203
+ !((zmq::socket_poller_t*) poller)->check_tag ()) {
1204
+ errno = EFAULT;
1205
+ return -1;
1206
+ }
1207
+
1208
+ delete ((zmq::socket_poller_t*) poller);
1209
+ *poller_p_ = NULL;
1210
+ return 0;
1211
+ }
1212
+
1213
+ int zmq_poller_add (void *poller_, void *s_, void *user_data_, short events_)
1214
+ {
1215
+ if (!poller_ || !((zmq::socket_poller_t*)poller_)->check_tag ()) {
1216
+ errno = EFAULT;
1217
+ return -1;
1218
+ }
1219
+
1220
+ if (!s_ || !((zmq::socket_base_t*)s_)->check_tag ()) {
1221
+ errno = ENOTSOCK;
1222
+ return -1;
1223
+ }
1224
+ zmq::socket_base_t *socket = (zmq::socket_base_t*)s_;
1225
+
1226
+ return ((zmq::socket_poller_t*)poller_)->add (socket, user_data_, events_);
1227
+ }
1228
+
1229
+ #if defined _WIN32
1230
+ int zmq_poller_add_fd (void *poller_, SOCKET fd_, void *user_data_, short events_)
1231
+ #else
1232
+ int zmq_poller_add_fd (void *poller_, int fd_, void *user_data_, short events_)
1233
+ #endif
1234
+ {
1235
+ if (!poller_ || !((zmq::socket_poller_t*)poller_)->check_tag ()) {
1236
+ errno = EFAULT;
1237
+ return -1;
1238
+ }
1239
+ if (fd_ == zmq::retired_fd) {
1240
+ errno = EBADF;
1241
+ return -1;
1242
+ }
1243
+
1244
+ return ((zmq::socket_poller_t*)poller_)->add_fd (fd_, user_data_, events_);
1245
+ }
1246
+
1247
+
1248
+ int zmq_poller_modify (void *poller_, void *s_, short events_)
1249
+ {
1250
+ if (!poller_ || !((zmq::socket_poller_t*)poller_)->check_tag ()) {
1251
+ errno = EFAULT;
1252
+ return -1;
1253
+ }
1254
+
1255
+ if (!s_ || !((zmq::socket_base_t*)s_)->check_tag ()) {
1256
+ errno = ENOTSOCK;
1257
+ return -1;
1258
+ }
1259
+ zmq::socket_base_t *socket = (zmq::socket_base_t*)s_;
1260
+
1261
+ return ((zmq::socket_poller_t*)poller_)->modify (socket, events_);
1262
+ }
1263
+
1264
+
1265
+ #if defined _WIN32
1266
+ int zmq_poller_modify_fd (void *poller_, SOCKET fd_, short events_)
1267
+ #else
1268
+ int zmq_poller_modify_fd (void *poller_, int fd_, short events_)
1269
+ #endif
1270
+ {
1271
+ if (!poller_ || !((zmq::socket_poller_t*)poller_)->check_tag ()) {
1272
+ errno = EFAULT;
1273
+ return -1;
1274
+ }
1275
+ if (fd_ == zmq::retired_fd) {
1276
+ errno = EBADF;
1277
+ return -1;
1278
+ }
1279
+
1280
+ return ((zmq::socket_poller_t*)poller_)->modify_fd (fd_, events_);
1281
+ }
1282
+
1283
+
1284
+ int zmq_poller_remove (void *poller_, void *s_)
1285
+ {
1286
+ if (!poller_ || !((zmq::socket_poller_t*)poller_)->check_tag ()) {
1287
+ errno = EFAULT;
1288
+ return -1;
1289
+ }
1290
+
1291
+ if (!s_ || !((zmq::socket_base_t*)s_)->check_tag ()) {
1292
+ errno = ENOTSOCK;
1293
+ return -1;
1294
+ }
1295
+ zmq::socket_base_t *socket = (zmq::socket_base_t*)s_;
1296
+
1297
+ return ((zmq::socket_poller_t*)poller_)->remove (socket);
1298
+ }
1299
+
1300
+ #if defined _WIN32
1301
+ int zmq_poller_remove_fd (void *poller_, SOCKET fd_)
1302
+ #else
1303
+ int zmq_poller_remove_fd (void *poller_, int fd_)
1304
+ #endif
1305
+ {
1306
+ if (!poller_ || !((zmq::socket_poller_t*)poller_)->check_tag ()) {
1307
+ errno = EFAULT;
1308
+ return -1;
1309
+ }
1310
+ if (fd_ == zmq::retired_fd) {
1311
+ errno = EBADF;
1312
+ return -1;
1313
+ }
1314
+
1315
+ return ((zmq::socket_poller_t*)poller_)->remove_fd (fd_);
1316
+ }
1317
+
1318
+
1319
+ int zmq_poller_wait (void *poller_, zmq_poller_event_t *event_, long timeout_)
1320
+ {
1321
+ if (!poller_ || !((zmq::socket_poller_t*)poller_)->check_tag ()) {
1322
+ errno = EFAULT;
1323
+ return -1;
1324
+ }
1325
+ if (!event_) {
1326
+ errno = EFAULT;
1327
+ return -1;
1328
+ }
1329
+
1330
+ int rc = zmq_poller_wait_all(poller_, event_, 1, timeout_);
1331
+
1332
+ if (rc < 0) {
1333
+ memset (event_, 0, sizeof(zmq_poller_event_t));
1334
+ }
1335
+ // wait_all returns number of events, but we return 0 for any success
1336
+ return rc >= 0 ? 0 : rc;
1337
+ }
1338
+
1339
+ int zmq_poller_wait_all (void *poller_, zmq_poller_event_t *events_, int n_events, long timeout_)
1340
+ {
1341
+ if (!poller_ || !((zmq::socket_poller_t*)poller_)->check_tag ()) {
1342
+ errno = EFAULT;
1343
+ return -1;
1344
+ }
1345
+ if (!events_) {
1346
+ errno = EFAULT;
1347
+ return -1;
1348
+ }
1349
+ if (n_events < 0) {
1350
+ errno = EINVAL;
1351
+ return -1;
1352
+ }
1353
+
1354
+ int rc = ((zmq::socket_poller_t*)poller_)->wait ((zmq::socket_poller_t::event_t *)events_, n_events, timeout_);
1355
+
1356
+ return rc;
1357
+ }
1358
+
1359
+ // Peer-specific state
1360
+
1361
+ int zmq_socket_get_peer_state (void *s_,
1362
+ const void *routing_id_,
1363
+ size_t routing_id_size_)
1364
+ {
1365
+ zmq::socket_base_t *s = as_socket_base_t (s_);
1366
+ if (!s)
1367
+ return -1;
1368
+
1369
+ return s->get_peer_state (routing_id_, routing_id_size_);
1370
+ }
1371
+
1372
+ // Timers
1373
+
1374
+ void *zmq_timers_new (void)
1375
+ {
1376
+ zmq::timers_t *timers = new (std::nothrow) zmq::timers_t;
1377
+ alloc_assert (timers);
1378
+ return timers;
1379
+ }
1380
+
1381
+ int zmq_timers_destroy (void **timers_p_)
1382
+ {
1383
+ void *timers = *timers_p_;
1384
+ if (!timers || !((zmq::timers_t *) timers)->check_tag ()) {
1385
+ errno = EFAULT;
1386
+ return -1;
1387
+ }
1388
+ delete ((zmq::timers_t *) timers);
1389
+ *timers_p_ = NULL;
1390
+ return 0;
1391
+ }
1392
+
1393
+ int zmq_timers_add (void *timers_, size_t interval_, zmq_timer_fn handler_, void *arg_)
1394
+ {
1395
+ if (!timers_ || !((zmq::timers_t*)timers_)->check_tag ()) {
1396
+ errno = EFAULT;
1397
+ return -1;
1398
+ }
1399
+
1400
+ return ((zmq::timers_t*)timers_)->add (interval_, handler_, arg_);
1401
+ }
1402
+
1403
+ int zmq_timers_cancel (void *timers_, int timer_id_)
1404
+ {
1405
+ if (!timers_ || !((zmq::timers_t*)timers_)->check_tag ()) {
1406
+ errno = EFAULT;
1407
+ return -1;
1408
+ }
1409
+
1410
+ return ((zmq::timers_t*)timers_)->cancel (timer_id_);
1411
+ }
1412
+
1413
+ int zmq_timers_set_interval (void *timers_, int timer_id_, size_t interval_)
1414
+ {
1415
+ if (!timers_ || !((zmq::timers_t*)timers_)->check_tag ()) {
1416
+ errno = EFAULT;
1417
+ return -1;
1418
+ }
1419
+
1420
+ return ((zmq::timers_t*)timers_)->set_interval (timer_id_, interval_);
1421
+ }
1422
+
1423
+ int zmq_timers_reset (void *timers_, int timer_id_)
1424
+ {
1425
+ if (!timers_ || !((zmq::timers_t*)timers_)->check_tag ()) {
1426
+ errno = EFAULT;
1427
+ return -1;
1428
+ }
1429
+
1430
+ return ((zmq::timers_t*)timers_)->reset (timer_id_);
1431
+ }
1432
+
1433
+ long zmq_timers_timeout (void *timers_)
1434
+ {
1435
+ if (!timers_ || !((zmq::timers_t*)timers_)->check_tag ()) {
1436
+ errno = EFAULT;
1437
+ return -1;
1438
+ }
1439
+
1440
+ return ((zmq::timers_t*)timers_)->timeout ();
1441
+ }
1442
+
1443
+ int zmq_timers_execute (void *timers_)
1444
+ {
1445
+ if (!timers_ || !((zmq::timers_t*)timers_)->check_tag ()) {
1446
+ errno = EFAULT;
1447
+ return -1;
1448
+ }
1449
+
1450
+ return ((zmq::timers_t*)timers_)->execute ();
1451
+ }
1452
+
1453
+ // The proxy functionality
1454
+
1455
+ int zmq_proxy (void *frontend_, void *backend_, void *capture_)
1456
+ {
1457
+ if (!frontend_ || !backend_) {
1458
+ errno = EFAULT;
1459
+ return -1;
1460
+ }
1461
+ return zmq::proxy (
1462
+ (zmq::socket_base_t*) frontend_,
1463
+ (zmq::socket_base_t*) backend_,
1464
+ (zmq::socket_base_t*) capture_);
1465
+ }
1466
+
1467
+ int zmq_proxy_steerable (void *frontend_, void *backend_, void *capture_, void *control_)
1468
+ {
1469
+ if (!frontend_ || !backend_) {
1470
+ errno = EFAULT;
1471
+ return -1;
1472
+ }
1473
+ return zmq::proxy (
1474
+ (zmq::socket_base_t*) frontend_,
1475
+ (zmq::socket_base_t*) backend_,
1476
+ (zmq::socket_base_t*) capture_,
1477
+ (zmq::socket_base_t*) control_);
1478
+ }
1479
+
1480
+ // The deprecated device functionality
1481
+
1482
+ int zmq_device (int /* type */, void *frontend_, void *backend_)
1483
+ {
1484
+ return zmq::proxy (
1485
+ (zmq::socket_base_t*) frontend_,
1486
+ (zmq::socket_base_t*) backend_, NULL);
1487
+ }
1488
+
1489
+ // Probe library capabilities; for now, reports on transport and security
1490
+
1491
+ int zmq_has (const char *capability)
1492
+ {
1493
+ #if !defined (ZMQ_HAVE_WINDOWS) && !defined (ZMQ_HAVE_OPENVMS)
1494
+ if (strcmp (capability, "ipc") == 0)
1495
+ return true;
1496
+ #endif
1497
+ #if defined (ZMQ_HAVE_OPENPGM)
1498
+ if (strcmp (capability, "pgm") == 0)
1499
+ return true;
1500
+ #endif
1501
+ #if defined (ZMQ_HAVE_TIPC)
1502
+ if (strcmp (capability, "tipc") == 0)
1503
+ return true;
1504
+ #endif
1505
+ #if defined (ZMQ_HAVE_NORM)
1506
+ if (strcmp (capability, "norm") == 0)
1507
+ return true;
1508
+ #endif
1509
+ #if defined (ZMQ_HAVE_CURVE)
1510
+ if (strcmp (capability, "curve") == 0)
1511
+ return true;
1512
+ #endif
1513
+ #if defined (HAVE_LIBGSSAPI_KRB5)
1514
+ if (strcmp (capability, "gssapi") == 0)
1515
+ return true;
1516
+ #endif
1517
+ #if defined (ZMQ_HAVE_VMCI)
1518
+ if (strcmp (capability, "vmci") == 0)
1519
+ return true;
1520
+ #endif
1521
+ #if defined (ZMQ_BUILD_DRAFT_API)
1522
+ if (strcmp (capability, "draft") == 0)
1523
+ return true;
1524
+ #endif
1525
+ // Whatever the application asked for, we don't have
1526
+ return false;
1527
+ }