libzmq 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. data/LICENSE +703 -0
  2. data/README.md +31 -0
  3. data/lib/libzmq.rb +17 -0
  4. data/lib/libzmq/ffi-rzmq.rb +3 -0
  5. data/libzmq/Makefile +5 -0
  6. data/libzmq/extconf.rb +24 -0
  7. data/libzmq/zeromq-2.1.7/AUTHORS +92 -0
  8. data/libzmq/zeromq-2.1.7/COPYING +674 -0
  9. data/libzmq/zeromq-2.1.7/COPYING.LESSER +206 -0
  10. data/libzmq/zeromq-2.1.7/ChangeLog +15620 -0
  11. data/libzmq/zeromq-2.1.7/INSTALL +237 -0
  12. data/libzmq/zeromq-2.1.7/MAINTAINERS +56 -0
  13. data/libzmq/zeromq-2.1.7/Makefile.am +42 -0
  14. data/libzmq/zeromq-2.1.7/Makefile.in +779 -0
  15. data/libzmq/zeromq-2.1.7/NEWS +275 -0
  16. data/libzmq/zeromq-2.1.7/README +39 -0
  17. data/libzmq/zeromq-2.1.7/acinclude.m4 +582 -0
  18. data/libzmq/zeromq-2.1.7/aclocal.m4 +1206 -0
  19. data/libzmq/zeromq-2.1.7/autogen.sh +45 -0
  20. data/libzmq/zeromq-2.1.7/builds/msvc/Makefile.am +8 -0
  21. data/libzmq/zeromq-2.1.7/builds/msvc/Makefile.in +390 -0
  22. data/libzmq/zeromq-2.1.7/builds/msvc/c_local_lat/c_local_lat.vcproj +176 -0
  23. data/libzmq/zeromq-2.1.7/builds/msvc/c_local_thr/c_local_thr.vcproj +176 -0
  24. data/libzmq/zeromq-2.1.7/builds/msvc/c_remote_lat/c_remote_lat.vcproj +176 -0
  25. data/libzmq/zeromq-2.1.7/builds/msvc/c_remote_thr/c_remote_thr.vcproj +176 -0
  26. data/libzmq/zeromq-2.1.7/builds/msvc/libzmq/libzmq.vcproj +783 -0
  27. data/libzmq/zeromq-2.1.7/builds/msvc/msvc.sln +89 -0
  28. data/libzmq/zeromq-2.1.7/builds/msvc/platform.hpp +32 -0
  29. data/libzmq/zeromq-2.1.7/builds/redhat/zeromq.spec.in +139 -0
  30. data/libzmq/zeromq-2.1.7/config/compile +143 -0
  31. data/libzmq/zeromq-2.1.7/config/config.guess +1502 -0
  32. data/libzmq/zeromq-2.1.7/config/config.sub +1714 -0
  33. data/libzmq/zeromq-2.1.7/config/depcomp +630 -0
  34. data/libzmq/zeromq-2.1.7/config/install-sh +520 -0
  35. data/libzmq/zeromq-2.1.7/config/libtool.m4 +7377 -0
  36. data/libzmq/zeromq-2.1.7/config/ltmain.sh +8413 -0
  37. data/libzmq/zeromq-2.1.7/config/ltoptions.m4 +368 -0
  38. data/libzmq/zeromq-2.1.7/config/ltsugar.m4 +123 -0
  39. data/libzmq/zeromq-2.1.7/config/ltversion.m4 +23 -0
  40. data/libzmq/zeromq-2.1.7/config/lt~obsolete.m4 +92 -0
  41. data/libzmq/zeromq-2.1.7/config/missing +376 -0
  42. data/libzmq/zeromq-2.1.7/configure +21645 -0
  43. data/libzmq/zeromq-2.1.7/configure.in +380 -0
  44. data/libzmq/zeromq-2.1.7/doc/Makefile.am +46 -0
  45. data/libzmq/zeromq-2.1.7/doc/Makefile.in +546 -0
  46. data/libzmq/zeromq-2.1.7/doc/asciidoc.conf +56 -0
  47. data/libzmq/zeromq-2.1.7/doc/zmq.7 +242 -0
  48. data/libzmq/zeromq-2.1.7/doc/zmq.html +846 -0
  49. data/libzmq/zeromq-2.1.7/doc/zmq.txt +218 -0
  50. data/libzmq/zeromq-2.1.7/doc/zmq_bind.3 +166 -0
  51. data/libzmq/zeromq-2.1.7/doc/zmq_bind.html +746 -0
  52. data/libzmq/zeromq-2.1.7/doc/zmq_bind.txt +91 -0
  53. data/libzmq/zeromq-2.1.7/doc/zmq_close.3 +81 -0
  54. data/libzmq/zeromq-2.1.7/doc/zmq_close.html +645 -0
  55. data/libzmq/zeromq-2.1.7/doc/zmq_close.txt +52 -0
  56. data/libzmq/zeromq-2.1.7/doc/zmq_connect.3 +161 -0
  57. data/libzmq/zeromq-2.1.7/doc/zmq_connect.html +732 -0
  58. data/libzmq/zeromq-2.1.7/doc/zmq_connect.txt +89 -0
  59. data/libzmq/zeromq-2.1.7/doc/zmq_cpp.7 +410 -0
  60. data/libzmq/zeromq-2.1.7/doc/zmq_cpp.html +765 -0
  61. data/libzmq/zeromq-2.1.7/doc/zmq_cpp.txt +212 -0
  62. data/libzmq/zeromq-2.1.7/doc/zmq_device.3 +140 -0
  63. data/libzmq/zeromq-2.1.7/doc/zmq_device.html +736 -0
  64. data/libzmq/zeromq-2.1.7/doc/zmq_device.txt +138 -0
  65. data/libzmq/zeromq-2.1.7/doc/zmq_epgm.7 +209 -0
  66. data/libzmq/zeromq-2.1.7/doc/zmq_epgm.html +749 -0
  67. data/libzmq/zeromq-2.1.7/doc/zmq_epgm.txt +162 -0
  68. data/libzmq/zeromq-2.1.7/doc/zmq_errno.3 +78 -0
  69. data/libzmq/zeromq-2.1.7/doc/zmq_errno.html +634 -0
  70. data/libzmq/zeromq-2.1.7/doc/zmq_errno.txt +50 -0
  71. data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.3 +944 -0
  72. data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.html +1713 -0
  73. data/libzmq/zeromq-2.1.7/doc/zmq_getsockopt.txt +407 -0
  74. data/libzmq/zeromq-2.1.7/doc/zmq_init.3 +71 -0
  75. data/libzmq/zeromq-2.1.7/doc/zmq_init.html +635 -0
  76. data/libzmq/zeromq-2.1.7/doc/zmq_init.txt +51 -0
  77. data/libzmq/zeromq-2.1.7/doc/zmq_inproc.7 +115 -0
  78. data/libzmq/zeromq-2.1.7/doc/zmq_inproc.html +669 -0
  79. data/libzmq/zeromq-2.1.7/doc/zmq_inproc.txt +89 -0
  80. data/libzmq/zeromq-2.1.7/doc/zmq_ipc.7 +109 -0
  81. data/libzmq/zeromq-2.1.7/doc/zmq_ipc.html +662 -0
  82. data/libzmq/zeromq-2.1.7/doc/zmq_ipc.txt +80 -0
  83. data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.3 +81 -0
  84. data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.html +647 -0
  85. data/libzmq/zeromq-2.1.7/doc/zmq_msg_close.txt +55 -0
  86. data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.3 +95 -0
  87. data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.html +656 -0
  88. data/libzmq/zeromq-2.1.7/doc/zmq_msg_copy.txt +57 -0
  89. data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.3 +76 -0
  90. data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.html +633 -0
  91. data/libzmq/zeromq-2.1.7/doc/zmq_msg_data.txt +48 -0
  92. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.3 +110 -0
  93. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.html +656 -0
  94. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init.txt +65 -0
  95. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.3 +138 -0
  96. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.html +678 -0
  97. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_data.txt +83 -0
  98. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.3 +97 -0
  99. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.html +656 -0
  100. data/libzmq/zeromq-2.1.7/doc/zmq_msg_init_size.txt +58 -0
  101. data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.3 +79 -0
  102. data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.html +645 -0
  103. data/libzmq/zeromq-2.1.7/doc/zmq_msg_move.txt +52 -0
  104. data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.3 +76 -0
  105. data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.html +633 -0
  106. data/libzmq/zeromq-2.1.7/doc/zmq_msg_size.txt +48 -0
  107. data/libzmq/zeromq-2.1.7/doc/zmq_pgm.7 +209 -0
  108. data/libzmq/zeromq-2.1.7/doc/zmq_pgm.html +749 -0
  109. data/libzmq/zeromq-2.1.7/doc/zmq_pgm.txt +162 -0
  110. data/libzmq/zeromq-2.1.7/doc/zmq_poll.3 +204 -0
  111. data/libzmq/zeromq-2.1.7/doc/zmq_poll.html +755 -0
  112. data/libzmq/zeromq-2.1.7/doc/zmq_poll.txt +132 -0
  113. data/libzmq/zeromq-2.1.7/doc/zmq_recv.3 +172 -0
  114. data/libzmq/zeromq-2.1.7/doc/zmq_recv.html +746 -0
  115. data/libzmq/zeromq-2.1.7/doc/zmq_recv.txt +121 -0
  116. data/libzmq/zeromq-2.1.7/doc/zmq_send.3 +185 -0
  117. data/libzmq/zeromq-2.1.7/doc/zmq_send.html +755 -0
  118. data/libzmq/zeromq-2.1.7/doc/zmq_send.txt +120 -0
  119. data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.3 +878 -0
  120. data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.html +1603 -0
  121. data/libzmq/zeromq-2.1.7/doc/zmq_setsockopt.txt +382 -0
  122. data/libzmq/zeromq-2.1.7/doc/zmq_socket.3 +779 -0
  123. data/libzmq/zeromq-2.1.7/doc/zmq_socket.html +1424 -0
  124. data/libzmq/zeromq-2.1.7/doc/zmq_socket.txt +342 -0
  125. data/libzmq/zeromq-2.1.7/doc/zmq_strerror.3 +78 -0
  126. data/libzmq/zeromq-2.1.7/doc/zmq_strerror.html +634 -0
  127. data/libzmq/zeromq-2.1.7/doc/zmq_strerror.txt +55 -0
  128. data/libzmq/zeromq-2.1.7/doc/zmq_tcp.7 +244 -0
  129. data/libzmq/zeromq-2.1.7/doc/zmq_tcp.html +755 -0
  130. data/libzmq/zeromq-2.1.7/doc/zmq_tcp.txt +162 -0
  131. data/libzmq/zeromq-2.1.7/doc/zmq_term.3 +135 -0
  132. data/libzmq/zeromq-2.1.7/doc/zmq_term.html +672 -0
  133. data/libzmq/zeromq-2.1.7/doc/zmq_term.txt +65 -0
  134. data/libzmq/zeromq-2.1.7/doc/zmq_version.3 +78 -0
  135. data/libzmq/zeromq-2.1.7/doc/zmq_version.html +632 -0
  136. data/libzmq/zeromq-2.1.7/doc/zmq_version.txt +53 -0
  137. data/libzmq/zeromq-2.1.7/foreign/openpgm/Makefile.am +8 -0
  138. data/libzmq/zeromq-2.1.7/foreign/openpgm/Makefile.in +588 -0
  139. data/libzmq/zeromq-2.1.7/foreign/openpgm/libpgm-5.1.115~dfsg.tar.gz +0 -0
  140. data/libzmq/zeromq-2.1.7/foreign/xmlParser/xmlParser.cpp +2923 -0
  141. data/libzmq/zeromq-2.1.7/foreign/xmlParser/xmlParser.hpp +762 -0
  142. data/libzmq/zeromq-2.1.7/include/zmq.h +269 -0
  143. data/libzmq/zeromq-2.1.7/include/zmq.hpp +301 -0
  144. data/libzmq/zeromq-2.1.7/include/zmq_utils.h +64 -0
  145. data/libzmq/zeromq-2.1.7/perf/Makefile.am +21 -0
  146. data/libzmq/zeromq-2.1.7/perf/Makefile.in +566 -0
  147. data/libzmq/zeromq-2.1.7/perf/inproc_lat.cpp +232 -0
  148. data/libzmq/zeromq-2.1.7/perf/inproc_thr.cpp +246 -0
  149. data/libzmq/zeromq-2.1.7/perf/local_lat.cpp +108 -0
  150. data/libzmq/zeromq-2.1.7/perf/local_thr.cpp +138 -0
  151. data/libzmq/zeromq-2.1.7/perf/remote_lat.cpp +121 -0
  152. data/libzmq/zeromq-2.1.7/perf/remote_thr.cpp +104 -0
  153. data/libzmq/zeromq-2.1.7/src/Makefile.am +155 -0
  154. data/libzmq/zeromq-2.1.7/src/Makefile.in +1320 -0
  155. data/libzmq/zeromq-2.1.7/src/array.hpp +147 -0
  156. data/libzmq/zeromq-2.1.7/src/atomic_counter.hpp +164 -0
  157. data/libzmq/zeromq-2.1.7/src/atomic_ptr.hpp +159 -0
  158. data/libzmq/zeromq-2.1.7/src/blob.hpp +34 -0
  159. data/libzmq/zeromq-2.1.7/src/clock.cpp +118 -0
  160. data/libzmq/zeromq-2.1.7/src/clock.hpp +60 -0
  161. data/libzmq/zeromq-2.1.7/src/command.cpp +39 -0
  162. data/libzmq/zeromq-2.1.7/src/command.hpp +147 -0
  163. data/libzmq/zeromq-2.1.7/src/config.hpp +88 -0
  164. data/libzmq/zeromq-2.1.7/src/connect_session.cpp +119 -0
  165. data/libzmq/zeromq-2.1.7/src/connect_session.hpp +65 -0
  166. data/libzmq/zeromq-2.1.7/src/ctx.cpp +322 -0
  167. data/libzmq/zeromq-2.1.7/src/ctx.hpp +159 -0
  168. data/libzmq/zeromq-2.1.7/src/decoder.cpp +129 -0
  169. data/libzmq/zeromq-2.1.7/src/decoder.hpp +207 -0
  170. data/libzmq/zeromq-2.1.7/src/device.cpp +120 -0
  171. data/libzmq/zeromq-2.1.7/src/device.hpp +32 -0
  172. data/libzmq/zeromq-2.1.7/src/devpoll.cpp +190 -0
  173. data/libzmq/zeromq-2.1.7/src/devpoll.hpp +100 -0
  174. data/libzmq/zeromq-2.1.7/src/dist.cpp +200 -0
  175. data/libzmq/zeromq-2.1.7/src/dist.hpp +90 -0
  176. data/libzmq/zeromq-2.1.7/src/encoder.cpp +90 -0
  177. data/libzmq/zeromq-2.1.7/src/encoder.hpp +184 -0
  178. data/libzmq/zeromq-2.1.7/src/epoll.cpp +177 -0
  179. data/libzmq/zeromq-2.1.7/src/epoll.hpp +96 -0
  180. data/libzmq/zeromq-2.1.7/src/err.cpp +238 -0
  181. data/libzmq/zeromq-2.1.7/src/err.hpp +145 -0
  182. data/libzmq/zeromq-2.1.7/src/fd.hpp +45 -0
  183. data/libzmq/zeromq-2.1.7/src/fq.cpp +164 -0
  184. data/libzmq/zeromq-2.1.7/src/fq.hpp +80 -0
  185. data/libzmq/zeromq-2.1.7/src/i_engine.hpp +53 -0
  186. data/libzmq/zeromq-2.1.7/src/i_inout.hpp +50 -0
  187. data/libzmq/zeromq-2.1.7/src/i_poll_events.hpp +46 -0
  188. data/libzmq/zeromq-2.1.7/src/io_object.cpp +107 -0
  189. data/libzmq/zeromq-2.1.7/src/io_object.hpp +78 -0
  190. data/libzmq/zeromq-2.1.7/src/io_thread.cpp +109 -0
  191. data/libzmq/zeromq-2.1.7/src/io_thread.hpp +88 -0
  192. data/libzmq/zeromq-2.1.7/src/ip.cpp +339 -0
  193. data/libzmq/zeromq-2.1.7/src/ip.hpp +68 -0
  194. data/libzmq/zeromq-2.1.7/src/kqueue.cpp +194 -0
  195. data/libzmq/zeromq-2.1.7/src/kqueue.hpp +103 -0
  196. data/libzmq/zeromq-2.1.7/src/lb.cpp +174 -0
  197. data/libzmq/zeromq-2.1.7/src/lb.hpp +79 -0
  198. data/libzmq/zeromq-2.1.7/src/libzmq.pc.in +10 -0
  199. data/libzmq/zeromq-2.1.7/src/likely.hpp +33 -0
  200. data/libzmq/zeromq-2.1.7/src/mailbox.cpp +382 -0
  201. data/libzmq/zeromq-2.1.7/src/mailbox.hpp +62 -0
  202. data/libzmq/zeromq-2.1.7/src/msg_content.hpp +52 -0
  203. data/libzmq/zeromq-2.1.7/src/mutex.hpp +121 -0
  204. data/libzmq/zeromq-2.1.7/src/named_session.cpp +85 -0
  205. data/libzmq/zeromq-2.1.7/src/named_session.hpp +57 -0
  206. data/libzmq/zeromq-2.1.7/src/object.cpp +467 -0
  207. data/libzmq/zeromq-2.1.7/src/object.hpp +127 -0
  208. data/libzmq/zeromq-2.1.7/src/options.cpp +336 -0
  209. data/libzmq/zeromq-2.1.7/src/options.hpp +87 -0
  210. data/libzmq/zeromq-2.1.7/src/own.cpp +214 -0
  211. data/libzmq/zeromq-2.1.7/src/own.hpp +140 -0
  212. data/libzmq/zeromq-2.1.7/src/pair.cpp +180 -0
  213. data/libzmq/zeromq-2.1.7/src/pair.hpp +76 -0
  214. data/libzmq/zeromq-2.1.7/src/pgm_receiver.cpp +259 -0
  215. data/libzmq/zeromq-2.1.7/src/pgm_receiver.hpp +129 -0
  216. data/libzmq/zeromq-2.1.7/src/pgm_sender.cpp +215 -0
  217. data/libzmq/zeromq-2.1.7/src/pgm_sender.hpp +105 -0
  218. data/libzmq/zeromq-2.1.7/src/pgm_socket.cpp +705 -0
  219. data/libzmq/zeromq-2.1.7/src/pgm_socket.hpp +118 -0
  220. data/libzmq/zeromq-2.1.7/src/pipe.cpp +409 -0
  221. data/libzmq/zeromq-2.1.7/src/pipe.hpp +214 -0
  222. data/libzmq/zeromq-2.1.7/src/platform.hpp.in +228 -0
  223. data/libzmq/zeromq-2.1.7/src/poll.cpp +180 -0
  224. data/libzmq/zeromq-2.1.7/src/poll.hpp +104 -0
  225. data/libzmq/zeromq-2.1.7/src/poller.hpp +73 -0
  226. data/libzmq/zeromq-2.1.7/src/poller_base.cpp +99 -0
  227. data/libzmq/zeromq-2.1.7/src/poller_base.hpp +84 -0
  228. data/libzmq/zeromq-2.1.7/src/pub.cpp +31 -0
  229. data/libzmq/zeromq-2.1.7/src/pub.hpp +44 -0
  230. data/libzmq/zeromq-2.1.7/src/pull.cpp +61 -0
  231. data/libzmq/zeromq-2.1.7/src/pull.hpp +60 -0
  232. data/libzmq/zeromq-2.1.7/src/push.cpp +62 -0
  233. data/libzmq/zeromq-2.1.7/src/push.hpp +59 -0
  234. data/libzmq/zeromq-2.1.7/src/reaper.cpp +121 -0
  235. data/libzmq/zeromq-2.1.7/src/reaper.hpp +77 -0
  236. data/libzmq/zeromq-2.1.7/src/rep.cpp +131 -0
  237. data/libzmq/zeromq-2.1.7/src/rep.hpp +59 -0
  238. data/libzmq/zeromq-2.1.7/src/req.cpp +121 -0
  239. data/libzmq/zeromq-2.1.7/src/req.hpp +58 -0
  240. data/libzmq/zeromq-2.1.7/src/select.cpp +211 -0
  241. data/libzmq/zeromq-2.1.7/src/select.hpp +116 -0
  242. data/libzmq/zeromq-2.1.7/src/semaphore.hpp +189 -0
  243. data/libzmq/zeromq-2.1.7/src/session.cpp +347 -0
  244. data/libzmq/zeromq-2.1.7/src/session.hpp +150 -0
  245. data/libzmq/zeromq-2.1.7/src/socket_base.cpp +811 -0
  246. data/libzmq/zeromq-2.1.7/src/socket_base.hpp +207 -0
  247. data/libzmq/zeromq-2.1.7/src/stdint.hpp +63 -0
  248. data/libzmq/zeromq-2.1.7/src/sub.cpp +75 -0
  249. data/libzmq/zeromq-2.1.7/src/sub.hpp +50 -0
  250. data/libzmq/zeromq-2.1.7/src/swap.cpp +325 -0
  251. data/libzmq/zeromq-2.1.7/src/swap.hpp +123 -0
  252. data/libzmq/zeromq-2.1.7/src/tcp_connecter.cpp +310 -0
  253. data/libzmq/zeromq-2.1.7/src/tcp_connecter.hpp +81 -0
  254. data/libzmq/zeromq-2.1.7/src/tcp_listener.cpp +371 -0
  255. data/libzmq/zeromq-2.1.7/src/tcp_listener.hpp +73 -0
  256. data/libzmq/zeromq-2.1.7/src/tcp_socket.cpp +228 -0
  257. data/libzmq/zeromq-2.1.7/src/tcp_socket.hpp +72 -0
  258. data/libzmq/zeromq-2.1.7/src/thread.cpp +97 -0
  259. data/libzmq/zeromq-2.1.7/src/thread.hpp +78 -0
  260. data/libzmq/zeromq-2.1.7/src/transient_session.cpp +41 -0
  261. data/libzmq/zeromq-2.1.7/src/transient_session.hpp +52 -0
  262. data/libzmq/zeromq-2.1.7/src/trie.cpp +181 -0
  263. data/libzmq/zeromq-2.1.7/src/trie.hpp +59 -0
  264. data/libzmq/zeromq-2.1.7/src/uuid.cpp +233 -0
  265. data/libzmq/zeromq-2.1.7/src/uuid.hpp +111 -0
  266. data/libzmq/zeromq-2.1.7/src/windows.hpp +79 -0
  267. data/libzmq/zeromq-2.1.7/src/wire.hpp +99 -0
  268. data/libzmq/zeromq-2.1.7/src/xpub.cpp +76 -0
  269. data/libzmq/zeromq-2.1.7/src/xpub.hpp +61 -0
  270. data/libzmq/zeromq-2.1.7/src/xrep.cpp +337 -0
  271. data/libzmq/zeromq-2.1.7/src/xrep.hpp +116 -0
  272. data/libzmq/zeromq-2.1.7/src/xreq.cpp +74 -0
  273. data/libzmq/zeromq-2.1.7/src/xreq.hpp +65 -0
  274. data/libzmq/zeromq-2.1.7/src/xsub.cpp +172 -0
  275. data/libzmq/zeromq-2.1.7/src/xsub.hpp +80 -0
  276. data/libzmq/zeromq-2.1.7/src/ypipe.hpp +209 -0
  277. data/libzmq/zeromq-2.1.7/src/yqueue.hpp +198 -0
  278. data/libzmq/zeromq-2.1.7/src/zmq.cpp +798 -0
  279. data/libzmq/zeromq-2.1.7/src/zmq_connecter.cpp +166 -0
  280. data/libzmq/zeromq-2.1.7/src/zmq_connecter.hpp +92 -0
  281. data/libzmq/zeromq-2.1.7/src/zmq_engine.cpp +220 -0
  282. data/libzmq/zeromq-2.1.7/src/zmq_engine.hpp +87 -0
  283. data/libzmq/zeromq-2.1.7/src/zmq_init.cpp +216 -0
  284. data/libzmq/zeromq-2.1.7/src/zmq_init.hpp +93 -0
  285. data/libzmq/zeromq-2.1.7/src/zmq_listener.cpp +78 -0
  286. data/libzmq/zeromq-2.1.7/src/zmq_listener.hpp +67 -0
  287. data/libzmq/zeromq-2.1.7/tests/Makefile.am +30 -0
  288. data/libzmq/zeromq-2.1.7/tests/Makefile.in +713 -0
  289. data/libzmq/zeromq-2.1.7/tests/test_hwm.cpp +68 -0
  290. data/libzmq/zeromq-2.1.7/tests/test_pair_inproc.cpp +31 -0
  291. data/libzmq/zeromq-2.1.7/tests/test_pair_ipc.cpp +31 -0
  292. data/libzmq/zeromq-2.1.7/tests/test_pair_tcp.cpp +31 -0
  293. data/libzmq/zeromq-2.1.7/tests/test_reqrep_inproc.cpp +31 -0
  294. data/libzmq/zeromq-2.1.7/tests/test_reqrep_ipc.cpp +31 -0
  295. data/libzmq/zeromq-2.1.7/tests/test_reqrep_tcp.cpp +31 -0
  296. data/libzmq/zeromq-2.1.7/tests/test_shutdown_stress.cpp +87 -0
  297. data/libzmq/zeromq-2.1.7/tests/testutil.hpp +130 -0
  298. data/libzmq/zeromq-2.1.7/version.sh +21 -0
  299. data/libzmq/zeromq-2.1.7/zeromq.spec +139 -0
  300. metadata +348 -0
@@ -0,0 +1,371 @@
1
+ /*
2
+ Copyright (c) 2007-2011 iMatix Corporation
3
+ Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
4
+
5
+ This file is part of 0MQ.
6
+
7
+ 0MQ is free software; you can redistribute it and/or modify it under
8
+ the terms of the GNU Lesser General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ 0MQ is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+
21
+ #include <string.h>
22
+
23
+ #include "../include/zmq.h"
24
+
25
+ #include "tcp_listener.hpp"
26
+ #include "platform.hpp"
27
+ #include "ip.hpp"
28
+ #include "config.hpp"
29
+ #include "err.hpp"
30
+
31
+ #ifdef ZMQ_HAVE_WINDOWS
32
+
33
+ zmq::tcp_listener_t::tcp_listener_t () :
34
+ has_file (false),
35
+ s (retired_fd)
36
+ {
37
+ memset (&addr, 0, sizeof (addr));
38
+ addr_len = 0;
39
+ }
40
+
41
+ zmq::tcp_listener_t::~tcp_listener_t ()
42
+ {
43
+ if (s != retired_fd)
44
+ close ();
45
+ }
46
+
47
+ int zmq::tcp_listener_t::set_address (const char *protocol_, const char *addr_,
48
+ int backlog_)
49
+ {
50
+ // IPC protocol is not supported on Windows platform.
51
+ if (strcmp (protocol_, "tcp") != 0 ) {
52
+ errno = EPROTONOSUPPORT;
53
+ return -1;
54
+ }
55
+
56
+ // Convert the interface into sockaddr_in structure.
57
+ int rc = resolve_ip_interface (&addr, &addr_len, addr_);
58
+ if (rc != 0)
59
+ return rc;
60
+
61
+ // Create a listening socket.
62
+ s = socket (addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
63
+ if (s == INVALID_SOCKET) {
64
+ wsa_error_to_errno ();
65
+ return -1;
66
+ }
67
+
68
+ // Allow reusing of the address.
69
+ int flag = 1;
70
+ rc = setsockopt (s, SOL_SOCKET, SO_EXCLUSIVEADDRUSE,
71
+ (const char*) &flag, sizeof (int));
72
+ wsa_assert (rc != SOCKET_ERROR);
73
+
74
+ // Set the non-blocking flag.
75
+ u_long uflag = 1;
76
+ rc = ioctlsocket (s, FIONBIO, &uflag);
77
+ wsa_assert (rc != SOCKET_ERROR);
78
+
79
+ // Bind the socket to the network interface and port.
80
+ rc = bind (s, (struct sockaddr*) &addr, addr_len);
81
+ if (rc == SOCKET_ERROR) {
82
+ wsa_error_to_errno ();
83
+ return -1;
84
+ }
85
+
86
+ // Listen for incomming connections.
87
+ rc = listen (s, backlog_);
88
+ if (rc == SOCKET_ERROR) {
89
+ wsa_error_to_errno ();
90
+ return -1;
91
+ }
92
+
93
+ return 0;
94
+ }
95
+
96
+ int zmq::tcp_listener_t::close ()
97
+ {
98
+ zmq_assert (s != retired_fd);
99
+ int rc = closesocket (s);
100
+ wsa_assert (rc != SOCKET_ERROR);
101
+ s = retired_fd;
102
+ return 0;
103
+ }
104
+
105
+ zmq::fd_t zmq::tcp_listener_t::get_fd ()
106
+ {
107
+ return s;
108
+ }
109
+
110
+ zmq::fd_t zmq::tcp_listener_t::accept ()
111
+ {
112
+ zmq_assert (s != retired_fd);
113
+
114
+ // Accept one incoming connection.
115
+ fd_t sock = ::accept (s, NULL, NULL);
116
+ if (sock == INVALID_SOCKET &&
117
+ (WSAGetLastError () == WSAEWOULDBLOCK ||
118
+ WSAGetLastError () == WSAECONNRESET))
119
+ return retired_fd;
120
+
121
+ zmq_assert (sock != INVALID_SOCKET);
122
+
123
+ // Set to non-blocking mode.
124
+ unsigned long argp = 1;
125
+ int rc = ioctlsocket (sock, FIONBIO, &argp);
126
+ wsa_assert (rc != SOCKET_ERROR);
127
+
128
+ // Disable Nagle's algorithm.
129
+ int flag = 1;
130
+ rc = setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, (char*) &flag,
131
+ sizeof (int));
132
+ wsa_assert (rc != SOCKET_ERROR);
133
+
134
+ return sock;
135
+ }
136
+
137
+ #else
138
+
139
+ #include <unistd.h>
140
+ #include <sys/socket.h>
141
+ #include <arpa/inet.h>
142
+ #include <netinet/tcp.h>
143
+ #include <netinet/in.h>
144
+ #include <netdb.h>
145
+ #include <fcntl.h>
146
+
147
+ #ifndef ZMQ_HAVE_OPENVMS
148
+ #include <sys/un.h>
149
+ #endif
150
+
151
+ #ifdef ZMQ_HAVE_OPENVMS
152
+ #include <ioctl.h>
153
+ #endif
154
+
155
+ zmq::tcp_listener_t::tcp_listener_t () :
156
+ has_file (false),
157
+ s (retired_fd)
158
+ {
159
+ memset (&addr, 0, sizeof (addr));
160
+ }
161
+
162
+ zmq::tcp_listener_t::~tcp_listener_t ()
163
+ {
164
+ if (s != retired_fd)
165
+ close ();
166
+ }
167
+
168
+ int zmq::tcp_listener_t::set_address (const char *protocol_, const char *addr_,
169
+ int backlog_)
170
+ {
171
+ if (strcmp (protocol_, "tcp") == 0 ) {
172
+
173
+ // Resolve the sockaddr to bind to.
174
+ int rc = resolve_ip_interface (&addr, &addr_len, addr_);
175
+ if (rc != 0)
176
+ return -1;
177
+
178
+ // Create a listening socket.
179
+ s = socket (addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
180
+ if (s == -1)
181
+ return -1;
182
+
183
+ // Allow reusing of the address.
184
+ int flag = 1;
185
+ rc = setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof (int));
186
+ errno_assert (rc == 0);
187
+
188
+ // Set the non-blocking flag.
189
+ #ifdef ZMQ_HAVE_OPENVMS
190
+ flag = 1;
191
+ rc = ioctl (s, FIONBIO, &flag);
192
+ errno_assert (rc != -1);
193
+ #else
194
+ flag = fcntl (s, F_GETFL, 0);
195
+ if (flag == -1)
196
+ flag = 0;
197
+ rc = fcntl (s, F_SETFL, flag | O_NONBLOCK);
198
+ errno_assert (rc != -1);
199
+ #endif
200
+
201
+ // Bind the socket to the network interface and port.
202
+ rc = bind (s, (struct sockaddr*) &addr, addr_len);
203
+ if (rc != 0) {
204
+ int err = errno;
205
+ if (close () != 0)
206
+ return -1;
207
+ errno = err;
208
+ return -1;
209
+ }
210
+
211
+ // Listen for incomming connections.
212
+ rc = listen (s, backlog_);
213
+ if (rc != 0) {
214
+ int err = errno;
215
+ if (close () != 0)
216
+ return -1;
217
+ errno = err;
218
+ return -1;
219
+ }
220
+
221
+ return 0;
222
+ }
223
+ #ifndef ZMQ_HAVE_OPENVMS
224
+ else if (strcmp (protocol_, "ipc") == 0) {
225
+
226
+ // Get rid of the file associated with the UNIX domain socket that
227
+ // may have been left behind by the previous run of the application.
228
+ ::unlink (addr_);
229
+
230
+ // Convert the address into sockaddr_un structure.
231
+ int rc = resolve_local_path (&addr, &addr_len, addr_);
232
+ if (rc != 0)
233
+ return -1;
234
+
235
+ // Create a listening socket.
236
+ s = socket (AF_UNIX, SOCK_STREAM, 0);
237
+ if (s == -1)
238
+ return -1;
239
+
240
+ // Set the non-blocking flag.
241
+ int flag = fcntl (s, F_GETFL, 0);
242
+ if (flag == -1)
243
+ flag = 0;
244
+ rc = fcntl (s, F_SETFL, flag | O_NONBLOCK);
245
+ errno_assert (rc != -1);
246
+
247
+ // Bind the socket to the file path.
248
+ rc = bind (s, (struct sockaddr*) &addr, addr_len);
249
+ if (rc != 0) {
250
+ int err = errno;
251
+ if (close () != 0)
252
+ return -1;
253
+ errno = err;
254
+ return -1;
255
+ }
256
+ has_file = true;
257
+
258
+ // Listen for incomming connections.
259
+ rc = listen (s, backlog_);
260
+ if (rc != 0) {
261
+ int err = errno;
262
+ if (close () != 0)
263
+ return -1;
264
+ errno = err;
265
+ return -1;
266
+ }
267
+
268
+ return 0;
269
+ }
270
+ #endif
271
+ else {
272
+ errno = EPROTONOSUPPORT;
273
+ return -1;
274
+ }
275
+ }
276
+
277
+ int zmq::tcp_listener_t::close ()
278
+ {
279
+ zmq_assert (s != retired_fd);
280
+ int rc = ::close (s);
281
+ if (rc != 0)
282
+ return -1;
283
+ s = retired_fd;
284
+
285
+ #ifndef ZMQ_HAVE_OPENVMS
286
+ // If there's an underlying UNIX domain socket, get rid of the file it
287
+ // is associated with.
288
+ struct sockaddr_un *su = (struct sockaddr_un*) &addr;
289
+ if (AF_UNIX == su->sun_family && has_file) {
290
+ rc = ::unlink(su->sun_path);
291
+ if (rc != 0)
292
+ return -1;
293
+ }
294
+ #endif
295
+
296
+ return 0;
297
+ }
298
+
299
+ zmq::fd_t zmq::tcp_listener_t::get_fd ()
300
+ {
301
+ return s;
302
+ }
303
+
304
+ zmq::fd_t zmq::tcp_listener_t::accept ()
305
+ {
306
+ zmq_assert (s != retired_fd);
307
+
308
+ // Accept one incoming connection.
309
+ fd_t sock = ::accept (s, NULL, NULL);
310
+
311
+ #if (defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_FREEBSD || \
312
+ defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_OSX || \
313
+ defined ZMQ_HAVE_OPENVMS || defined ZMQ_HAVE_NETBSD || \
314
+ defined ZMQ_HAVE_CYGWIN)
315
+ if (sock == -1 &&
316
+ (errno == EAGAIN || errno == EWOULDBLOCK ||
317
+ errno == EINTR || errno == ECONNABORTED))
318
+ return retired_fd;
319
+ #elif (defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_AIX)
320
+ if (sock == -1 &&
321
+ (errno == EWOULDBLOCK || errno == EINTR ||
322
+ errno == ECONNABORTED || errno == EPROTO))
323
+ return retired_fd;
324
+ #elif defined ZMQ_HAVE_HPUX
325
+ if (sock == -1 &&
326
+ (errno == EAGAIN || errno == EWOULDBLOCK ||
327
+ errno == EINTR || errno == ECONNABORTED || errno == ENOBUFS))
328
+ return retired_fd;
329
+ #elif defined ZMQ_HAVE_QNXNTO
330
+ if (sock == -1 &&
331
+ (errno == EWOULDBLOCK || errno == EINTR || errno == ECONNABORTED))
332
+ return retired_fd;
333
+ #endif
334
+
335
+ errno_assert (sock != -1);
336
+
337
+ // Set to non-blocking mode.
338
+ #ifdef ZMQ_HAVE_OPENVMS
339
+ int flags = 1;
340
+ int rc = ioctl (sock, FIONBIO, &flags);
341
+ errno_assert (rc != -1);
342
+ #else
343
+ int flags = fcntl (s, F_GETFL, 0);
344
+ if (flags == -1)
345
+ flags = 0;
346
+ int rc = fcntl (sock, F_SETFL, flags | O_NONBLOCK);
347
+ errno_assert (rc != -1);
348
+ #endif
349
+
350
+ struct sockaddr *sa = (struct sockaddr*) &addr;
351
+ if (AF_UNIX != sa->sa_family) {
352
+
353
+ // Disable Nagle's algorithm.
354
+ int flag = 1;
355
+ rc = setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, (char*) &flag,
356
+ sizeof (int));
357
+ errno_assert (rc == 0);
358
+
359
+ #ifdef ZMQ_HAVE_OPENVMS
360
+ // Disable delayed acknowledgements.
361
+ flag = 1;
362
+ rc = setsockopt (sock, IPPROTO_TCP, TCP_NODELACK, (char*) &flag,
363
+ sizeof (int));
364
+ errno_assert (rc != SOCKET_ERROR);
365
+ #endif
366
+ }
367
+
368
+ return sock;
369
+ }
370
+
371
+ #endif
@@ -0,0 +1,73 @@
1
+ /*
2
+ Copyright (c) 2007-2011 iMatix Corporation
3
+ Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
4
+
5
+ This file is part of 0MQ.
6
+
7
+ 0MQ is free software; you can redistribute it and/or modify it under
8
+ the terms of the GNU Lesser General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ 0MQ is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+
21
+ #ifndef __ZMQ_TCP_LISTENER_HPP_INCLUDED__
22
+ #define __ZMQ_TCP_LISTENER_HPP_INCLUDED__
23
+
24
+ #include "fd.hpp"
25
+ #include "ip.hpp"
26
+
27
+ namespace zmq
28
+ {
29
+
30
+ // The class encapsulating simple TCP listening socket.
31
+
32
+ class tcp_listener_t
33
+ {
34
+ public:
35
+
36
+ tcp_listener_t ();
37
+ ~tcp_listener_t ();
38
+
39
+ // Start listening on the interface.
40
+ int set_address (const char *protocol_, const char *addr_,
41
+ int backlog_);
42
+
43
+ // Close the listening socket.
44
+ int close ();
45
+
46
+ // Get the file descriptor to poll on to get notified about
47
+ // newly created connections.
48
+ fd_t get_fd ();
49
+
50
+ // Accept the new connection. Returns the file descriptor of the
51
+ // newly created connection. The function may return retired_fd
52
+ // if the connection was dropped while waiting in the listen backlog.
53
+ fd_t accept ();
54
+
55
+ private:
56
+
57
+ // Address to listen on.
58
+ sockaddr_storage addr;
59
+ socklen_t addr_len;
60
+
61
+ // True, if the undelying file for UNIX domain socket exists.
62
+ bool has_file;
63
+
64
+ // Underlying socket.
65
+ fd_t s;
66
+
67
+ tcp_listener_t (const tcp_listener_t&);
68
+ const tcp_listener_t &operator = (const tcp_listener_t&);
69
+ };
70
+
71
+ }
72
+
73
+ #endif
@@ -0,0 +1,228 @@
1
+ /*
2
+ Copyright (c) 2007-2011 iMatix Corporation
3
+ Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
4
+
5
+ This file is part of 0MQ.
6
+
7
+ 0MQ is free software; you can redistribute it and/or modify it under
8
+ the terms of the GNU Lesser General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ 0MQ is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+
21
+ #include "tcp_socket.hpp"
22
+ #include "platform.hpp"
23
+ #include "err.hpp"
24
+
25
+ #ifdef ZMQ_HAVE_WINDOWS
26
+
27
+ zmq::tcp_socket_t::tcp_socket_t () :
28
+ s (retired_fd)
29
+ {
30
+ }
31
+
32
+ zmq::tcp_socket_t::~tcp_socket_t ()
33
+ {
34
+ if (s != retired_fd)
35
+ close ();
36
+ }
37
+
38
+ int zmq::tcp_socket_t::open (fd_t fd_, uint64_t sndbuf_, uint64_t rcvbuf_)
39
+ {
40
+ zmq_assert (s == retired_fd);
41
+ s = fd_;
42
+
43
+ if (sndbuf_) {
44
+ int sz = (int) sndbuf_;
45
+ int rc = setsockopt (s, SOL_SOCKET, SO_SNDBUF,
46
+ (char*) &sz, sizeof (int));
47
+ errno_assert (rc == 0);
48
+ }
49
+
50
+ if (rcvbuf_) {
51
+ int sz = (int) rcvbuf_;
52
+ int rc = setsockopt (s, SOL_SOCKET, SO_RCVBUF,
53
+ (char*) &sz, sizeof (int));
54
+ errno_assert (rc == 0);
55
+ }
56
+
57
+ return 0;
58
+ }
59
+
60
+ int zmq::tcp_socket_t::close ()
61
+ {
62
+ zmq_assert (s != retired_fd);
63
+ int rc = closesocket (s);
64
+ wsa_assert (rc != SOCKET_ERROR);
65
+ s = retired_fd;
66
+ return 0;
67
+ }
68
+
69
+ zmq::fd_t zmq::tcp_socket_t::get_fd ()
70
+ {
71
+ return s;
72
+ }
73
+
74
+ int zmq::tcp_socket_t::write (const void *data, int size)
75
+ {
76
+ int nbytes = send (s, (char*) data, size, 0);
77
+
78
+ // If not a single byte can be written to the socket in non-blocking mode
79
+ // we'll get an error (this may happen during the speculative write).
80
+ if (nbytes == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK)
81
+ return 0;
82
+
83
+ // Signalise peer failure.
84
+ if (nbytes == -1 && (
85
+ WSAGetLastError () == WSAENETDOWN ||
86
+ WSAGetLastError () == WSAENETRESET ||
87
+ WSAGetLastError () == WSAEHOSTUNREACH ||
88
+ WSAGetLastError () == WSAECONNABORTED ||
89
+ WSAGetLastError () == WSAETIMEDOUT ||
90
+ WSAGetLastError () == WSAECONNRESET))
91
+ return -1;
92
+
93
+ wsa_assert (nbytes != SOCKET_ERROR);
94
+
95
+ return (size_t) nbytes;
96
+ }
97
+
98
+ int zmq::tcp_socket_t::read (void *data, int size)
99
+ {
100
+ int nbytes = recv (s, (char*) data, size, 0);
101
+
102
+ // If not a single byte can be read from the socket in non-blocking mode
103
+ // we'll get an error (this may happen during the speculative read).
104
+ if (nbytes == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK)
105
+ return 0;
106
+
107
+ // Connection failure.
108
+ if (nbytes == -1 && (
109
+ WSAGetLastError () == WSAENETDOWN ||
110
+ WSAGetLastError () == WSAENETRESET ||
111
+ WSAGetLastError () == WSAECONNABORTED ||
112
+ WSAGetLastError () == WSAETIMEDOUT ||
113
+ WSAGetLastError () == WSAECONNRESET ||
114
+ WSAGetLastError () == WSAECONNREFUSED ||
115
+ WSAGetLastError () == WSAENOTCONN))
116
+ return -1;
117
+
118
+ wsa_assert (nbytes != SOCKET_ERROR);
119
+
120
+ // Orderly shutdown by the other peer.
121
+ if (nbytes == 0)
122
+ return -1;
123
+
124
+ return (size_t) nbytes;
125
+ }
126
+
127
+ #else
128
+
129
+ #include <unistd.h>
130
+ #include <sys/socket.h>
131
+ #include <arpa/inet.h>
132
+ #include <netinet/tcp.h>
133
+ #include <netinet/in.h>
134
+ #include <netdb.h>
135
+ #include <fcntl.h>
136
+
137
+ zmq::tcp_socket_t::tcp_socket_t () :
138
+ s (retired_fd)
139
+ {
140
+ }
141
+
142
+ zmq::tcp_socket_t::~tcp_socket_t ()
143
+ {
144
+ if (s != retired_fd)
145
+ close ();
146
+ }
147
+
148
+ int zmq::tcp_socket_t::open (fd_t fd_, uint64_t sndbuf_, uint64_t rcvbuf_)
149
+ {
150
+ assert (s == retired_fd);
151
+ s = fd_;
152
+
153
+ if (sndbuf_) {
154
+ int sz = (int) sndbuf_;
155
+ int rc = setsockopt (s, SOL_SOCKET, SO_SNDBUF, &sz, sizeof (int));
156
+ errno_assert (rc == 0);
157
+ }
158
+
159
+ if (rcvbuf_) {
160
+ int sz = (int) rcvbuf_;
161
+ int rc = setsockopt (s, SOL_SOCKET, SO_RCVBUF, &sz, sizeof (int));
162
+ errno_assert (rc == 0);
163
+ }
164
+
165
+ return 0;
166
+ }
167
+
168
+ int zmq::tcp_socket_t::close ()
169
+ {
170
+ zmq_assert (s != retired_fd);
171
+ int rc = ::close (s);
172
+ if (rc != 0)
173
+ return -1;
174
+ s = retired_fd;
175
+ return 0;
176
+ }
177
+
178
+ zmq::fd_t zmq::tcp_socket_t::get_fd ()
179
+ {
180
+ return s;
181
+ }
182
+
183
+ int zmq::tcp_socket_t::write (const void *data, int size)
184
+ {
185
+ ssize_t nbytes = send (s, data, size, 0);
186
+
187
+ // Several errors are OK. When speculative write is being done we may not
188
+ // be able to write a single byte to the socket. Also, SIGSTOP issued
189
+ // by a debugging tool can result in EINTR error.
190
+ if (nbytes == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ||
191
+ errno == EINTR))
192
+ return 0;
193
+
194
+ // Signalise peer failure.
195
+ if (nbytes == -1 && (errno == ECONNRESET || errno == EPIPE))
196
+ return -1;
197
+
198
+ errno_assert (nbytes != -1);
199
+ return (size_t) nbytes;
200
+ }
201
+
202
+ int zmq::tcp_socket_t::read (void *data, int size)
203
+ {
204
+ ssize_t nbytes = recv (s, data, size, 0);
205
+
206
+ // Several errors are OK. When speculative read is being done we may not
207
+ // be able to read a single byte to the socket. Also, SIGSTOP issued
208
+ // by a debugging tool can result in EINTR error.
209
+ if (nbytes == -1 && (errno == EAGAIN || errno == EWOULDBLOCK ||
210
+ errno == EINTR))
211
+ return 0;
212
+
213
+ // Signalise peer failure.
214
+ if (nbytes == -1 && (errno == ECONNRESET || errno == ECONNREFUSED ||
215
+ errno == ETIMEDOUT || errno == EHOSTUNREACH))
216
+ return -1;
217
+
218
+ errno_assert (nbytes != -1);
219
+
220
+ // Orderly shutdown by the other peer.
221
+ if (nbytes == 0)
222
+ return -1;
223
+
224
+ return (size_t) nbytes;
225
+ }
226
+
227
+ #endif
228
+