noderb 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (361) hide show
  1. data/ext/noderb_extension/libuv/AUTHORS +11 -1
  2. data/ext/noderb_extension/libuv/LICENSE +0 -8
  3. data/ext/noderb_extension/libuv/Makefile +5 -5
  4. data/ext/noderb_extension/libuv/README +11 -6
  5. data/ext/noderb_extension/libuv/common.gypi +158 -7
  6. data/ext/noderb_extension/libuv/config-unix.mk +34 -26
  7. data/ext/noderb_extension/libuv/gyp_uv +22 -4
  8. data/ext/noderb_extension/libuv/include/{eio.h → uv-private/eio.h} +2 -2
  9. data/ext/noderb_extension/libuv/include/{uv-unix.h → uv-private/uv-unix.h} +40 -0
  10. data/ext/noderb_extension/libuv/include/{uv-win.h → uv-private/uv-win.h} +96 -14
  11. data/ext/noderb_extension/libuv/include/uv.h +508 -83
  12. data/ext/noderb_extension/libuv/src/unix/cares.c +185 -0
  13. data/ext/noderb_extension/libuv/src/unix/core.c +828 -0
  14. data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_darwin.h +4 -0
  15. data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_linux.h +5 -15
  16. data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.c +23 -2
  17. data/ext/noderb_extension/libuv/src/unix/error.c +102 -0
  18. data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_linux.h +26 -15
  19. data/ext/noderb_extension/libuv/src/unix/fs.c +562 -0
  20. data/ext/noderb_extension/libuv/src/unix/internal.h +75 -0
  21. data/ext/noderb_extension/libuv/src/unix/pipe.c +282 -0
  22. data/ext/noderb_extension/libuv/src/unix/process.c +287 -0
  23. data/ext/noderb_extension/libuv/src/unix/stream.c +727 -0
  24. data/ext/noderb_extension/libuv/src/unix/tcp.c +226 -0
  25. data/ext/noderb_extension/libuv/src/unix/udp.c +524 -0
  26. data/ext/noderb_extension/libuv/src/{uv-eio.c → unix/uv-eio.c} +48 -27
  27. data/ext/noderb_extension/libuv/src/{uv-eio.h → unix/uv-eio.h} +1 -1
  28. data/ext/noderb_extension/libuv/src/uv-common.c +24 -14
  29. data/ext/noderb_extension/libuv/src/uv-common.h +12 -7
  30. data/ext/noderb_extension/libuv/src/win/async.c +14 -16
  31. data/ext/noderb_extension/libuv/src/win/cares.c +64 -79
  32. data/ext/noderb_extension/libuv/src/win/core.c +105 -53
  33. data/ext/noderb_extension/libuv/src/win/error.c +23 -13
  34. data/ext/noderb_extension/libuv/src/win/fs.c +807 -0
  35. data/ext/noderb_extension/libuv/src/win/getaddrinfo.c +61 -41
  36. data/ext/noderb_extension/libuv/src/win/handle.c +56 -30
  37. data/ext/noderb_extension/libuv/src/win/internal.h +134 -95
  38. data/ext/noderb_extension/libuv/src/win/loop-watcher.c +21 -18
  39. data/ext/noderb_extension/libuv/src/win/pipe.c +313 -158
  40. data/ext/noderb_extension/libuv/src/win/process.c +117 -131
  41. data/ext/noderb_extension/libuv/src/win/req.c +55 -31
  42. data/ext/noderb_extension/libuv/src/win/stdio.c +5 -5
  43. data/ext/noderb_extension/libuv/src/win/stream.c +19 -14
  44. data/ext/noderb_extension/libuv/src/win/tcp.c +278 -336
  45. data/ext/noderb_extension/libuv/src/win/threadpool.c +73 -0
  46. data/ext/noderb_extension/libuv/src/win/timer.c +44 -37
  47. data/ext/noderb_extension/libuv/src/win/udp.c +592 -0
  48. data/ext/noderb_extension/libuv/src/win/util.c +20 -6
  49. data/ext/noderb_extension/libuv/src/win/winapi.c +23 -6
  50. data/ext/noderb_extension/libuv/src/win/winapi.h +4206 -0
  51. data/ext/noderb_extension/libuv/src/win/winsock.c +270 -0
  52. data/ext/noderb_extension/libuv/src/win/winsock.h +134 -0
  53. data/ext/noderb_extension/libuv/test/benchmark-ares.c +10 -6
  54. data/ext/noderb_extension/libuv/test/benchmark-getaddrinfo.c +10 -7
  55. data/ext/noderb_extension/libuv/test/benchmark-list.h +21 -0
  56. data/ext/noderb_extension/libuv/test/benchmark-ping-pongs.c +11 -7
  57. data/ext/noderb_extension/libuv/test/benchmark-pound.c +147 -58
  58. data/ext/noderb_extension/libuv/test/benchmark-pump.c +29 -23
  59. data/ext/noderb_extension/libuv/test/benchmark-spawn.c +13 -10
  60. data/ext/noderb_extension/libuv/test/benchmark-udp-packet-storm.c +250 -0
  61. data/ext/noderb_extension/libuv/test/dns-server.c +11 -6
  62. data/ext/noderb_extension/libuv/test/echo-server.c +30 -22
  63. data/ext/noderb_extension/libuv/test/test-async.c +3 -3
  64. data/ext/noderb_extension/libuv/test/test-callback-stack.c +6 -6
  65. data/ext/noderb_extension/libuv/test/test-connection-fail.c +6 -5
  66. data/ext/noderb_extension/libuv/test/test-delayed-accept.c +13 -13
  67. data/ext/noderb_extension/libuv/test/test-fs.c +715 -0
  68. data/ext/noderb_extension/libuv/test/test-getaddrinfo.c +11 -8
  69. data/ext/noderb_extension/libuv/test/test-gethostbyname.c +8 -9
  70. data/ext/noderb_extension/libuv/test/test-getsockname.c +142 -16
  71. data/ext/noderb_extension/libuv/test/test-idle.c +4 -3
  72. data/ext/noderb_extension/libuv/test/test-list.h +29 -2
  73. data/ext/noderb_extension/libuv/test/test-loop-handles.c +9 -8
  74. data/ext/noderb_extension/libuv/test/test-ping-pong.c +9 -9
  75. data/ext/noderb_extension/libuv/test/test-pipe-bind-error.c +18 -14
  76. data/ext/noderb_extension/libuv/test/test-ref.c +17 -16
  77. data/ext/noderb_extension/libuv/test/test-shutdown-eof.c +5 -5
  78. data/ext/noderb_extension/libuv/test/test-spawn.c +17 -17
  79. data/ext/noderb_extension/libuv/test/test-tcp-bind-error.c +24 -18
  80. data/ext/noderb_extension/libuv/test/test-tcp-bind6-error.c +19 -14
  81. data/ext/noderb_extension/libuv/test/test-tcp-writealot.c +6 -5
  82. data/ext/noderb_extension/libuv/test/test-threadpool.c +59 -0
  83. data/ext/noderb_extension/libuv/test/test-timer-again.c +15 -12
  84. data/ext/noderb_extension/libuv/test/test-timer.c +8 -8
  85. data/ext/noderb_extension/libuv/test/test-udp-dgram-too-big.c +88 -0
  86. data/ext/noderb_extension/libuv/test/test-udp-ipv6.c +158 -0
  87. data/ext/noderb_extension/libuv/test/test-udp-send-and-recv.c +210 -0
  88. data/ext/noderb_extension/libuv/{all.gyp → uv.gyp} +75 -77
  89. data/ext/noderb_extension/libuv/vcbuild.bat +93 -0
  90. data/ext/noderb_extension/noderb.c +13 -0
  91. data/ext/noderb_extension/noderb_common.h +2 -1
  92. data/ext/noderb_extension/noderb_defer.c +54 -0
  93. data/ext/noderb_extension/noderb_defer.h +15 -0
  94. data/ext/noderb_extension/noderb_dns.c +1 -1
  95. data/ext/noderb_extension/noderb_fs.c +277 -0
  96. data/ext/noderb_extension/noderb_fs.h +27 -0
  97. data/ext/noderb_extension/noderb_process.c +5 -5
  98. data/ext/noderb_extension/noderb_tcp.c +10 -6
  99. data/ext/noderb_extension/noderb_timers.c +1 -1
  100. data/ext/noderb_extension/noderb_tools.c +42 -8
  101. data/ext/noderb_extension/noderb_tools.h +3 -1
  102. data/lib/noderb/defer.rb +25 -0
  103. data/lib/noderb/file.rb +119 -0
  104. data/lib/noderb/fs.rb +72 -0
  105. data/lib/noderb/version.rb +1 -1
  106. data/lib/noderb.rb +8 -0
  107. metadata +102 -266
  108. data/ext/noderb_extension/libuv/BSDmakefile +0 -2
  109. data/ext/noderb_extension/libuv/create-msvs-files.bat +0 -21
  110. data/ext/noderb_extension/libuv/deps/pthread-win32/ANNOUNCE +0 -482
  111. data/ext/noderb_extension/libuv/deps/pthread-win32/BUGS +0 -141
  112. data/ext/noderb_extension/libuv/deps/pthread-win32/Bmakefile +0 -268
  113. data/ext/noderb_extension/libuv/deps/pthread-win32/CONTRIBUTORS +0 -140
  114. data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING +0 -150
  115. data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING.LIB +0 -504
  116. data/ext/noderb_extension/libuv/deps/pthread-win32/ChangeLog +0 -5194
  117. data/ext/noderb_extension/libuv/deps/pthread-win32/FAQ +0 -451
  118. data/ext/noderb_extension/libuv/deps/pthread-win32/GNUmakefile +0 -593
  119. data/ext/noderb_extension/libuv/deps/pthread-win32/MAINTAINERS +0 -4
  120. data/ext/noderb_extension/libuv/deps/pthread-win32/Makefile +0 -516
  121. data/ext/noderb_extension/libuv/deps/pthread-win32/NEWS +0 -1245
  122. data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile +0 -24
  123. data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile.tests +0 -260
  124. data/ext/noderb_extension/libuv/deps/pthread-win32/PROGRESS +0 -4
  125. data/ext/noderb_extension/libuv/deps/pthread-win32/README +0 -601
  126. data/ext/noderb_extension/libuv/deps/pthread-win32/README.Borland +0 -57
  127. data/ext/noderb_extension/libuv/deps/pthread-win32/README.CV +0 -3036
  128. data/ext/noderb_extension/libuv/deps/pthread-win32/README.NONPORTABLE +0 -783
  129. data/ext/noderb_extension/libuv/deps/pthread-win32/README.Watcom +0 -62
  130. data/ext/noderb_extension/libuv/deps/pthread-win32/README.WinCE +0 -6
  131. data/ext/noderb_extension/libuv/deps/pthread-win32/TODO +0 -7
  132. data/ext/noderb_extension/libuv/deps/pthread-win32/WinCE-PORT +0 -222
  133. data/ext/noderb_extension/libuv/deps/pthread-win32/attr.c +0 -53
  134. data/ext/noderb_extension/libuv/deps/pthread-win32/autostatic.c +0 -69
  135. data/ext/noderb_extension/libuv/deps/pthread-win32/barrier.c +0 -47
  136. data/ext/noderb_extension/libuv/deps/pthread-win32/build/all.gyp +0 -207
  137. data/ext/noderb_extension/libuv/deps/pthread-win32/builddmc.bat +0 -9
  138. data/ext/noderb_extension/libuv/deps/pthread-win32/cancel.c +0 -44
  139. data/ext/noderb_extension/libuv/deps/pthread-win32/cleanup.c +0 -148
  140. data/ext/noderb_extension/libuv/deps/pthread-win32/condvar.c +0 -50
  141. data/ext/noderb_extension/libuv/deps/pthread-win32/config.h +0 -153
  142. data/ext/noderb_extension/libuv/deps/pthread-win32/context.h +0 -74
  143. data/ext/noderb_extension/libuv/deps/pthread-win32/create.c +0 -308
  144. data/ext/noderb_extension/libuv/deps/pthread-win32/dll.c +0 -92
  145. data/ext/noderb_extension/libuv/deps/pthread-win32/errno.c +0 -94
  146. data/ext/noderb_extension/libuv/deps/pthread-win32/exit.c +0 -44
  147. data/ext/noderb_extension/libuv/deps/pthread-win32/fork.c +0 -39
  148. data/ext/noderb_extension/libuv/deps/pthread-win32/global.c +0 -107
  149. data/ext/noderb_extension/libuv/deps/pthread-win32/implement.h +0 -944
  150. data/ext/noderb_extension/libuv/deps/pthread-win32/misc.c +0 -50
  151. data/ext/noderb_extension/libuv/deps/pthread-win32/mutex.c +0 -62
  152. data/ext/noderb_extension/libuv/deps/pthread-win32/need_errno.h +0 -145
  153. data/ext/noderb_extension/libuv/deps/pthread-win32/nonportable.c +0 -47
  154. data/ext/noderb_extension/libuv/deps/pthread-win32/private.c +0 -54
  155. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.c +0 -66
  156. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsp +0 -142
  157. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsw +0 -29
  158. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.h +0 -1368
  159. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_destroy.c +0 -79
  160. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getdetachstate.c +0 -86
  161. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getinheritsched.c +0 -51
  162. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedparam.c +0 -52
  163. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedpolicy.c +0 -61
  164. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getscope.c +0 -54
  165. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstackaddr.c +0 -97
  166. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstacksize.c +0 -100
  167. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_init.c +0 -117
  168. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setdetachstate.c +0 -91
  169. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setinheritsched.c +0 -57
  170. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedparam.c +0 -63
  171. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedpolicy.c +0 -55
  172. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setscope.c +0 -62
  173. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstackaddr.c +0 -97
  174. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstacksize.c +0 -110
  175. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_destroy.c +0 -103
  176. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_init.c +0 -69
  177. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_wait.c +0 -104
  178. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_destroy.c +0 -83
  179. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_getpshared.c +0 -95
  180. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_init.c +0 -85
  181. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_setpshared.c +0 -119
  182. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cancel.c +0 -189
  183. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_destroy.c +0 -253
  184. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_init.c +0 -167
  185. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_signal.c +0 -231
  186. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_wait.c +0 -567
  187. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_destroy.c +0 -86
  188. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_getpshared.c +0 -97
  189. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_init.c +0 -87
  190. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_setpshared.c +0 -117
  191. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_delay_np.c +0 -172
  192. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_detach.c +0 -136
  193. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_equal.c +0 -76
  194. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_exit.c +0 -106
  195. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getconcurrency.c +0 -45
  196. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getschedparam.c +0 -75
  197. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getspecific.c +0 -87
  198. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getunique_np.c +0 -47
  199. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getw32threadhandle_np.c +0 -65
  200. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_join.c +0 -157
  201. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_create.c +0 -108
  202. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_delete.c +0 -125
  203. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_kill.c +0 -105
  204. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_consistent.c +0 -187
  205. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_destroy.c +0 -148
  206. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_init.c +0 -130
  207. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_lock.c +0 -269
  208. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_timedlock.c +0 -324
  209. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_trylock.c +0 -154
  210. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_unlock.c +0 -175
  211. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_destroy.c +0 -83
  212. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getkind_np.c +0 -44
  213. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getpshared.c +0 -95
  214. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getrobust.c +0 -113
  215. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_gettype.c +0 -56
  216. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_init.c +0 -86
  217. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setkind_np.c +0 -44
  218. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setpshared.c +0 -119
  219. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setrobust.c +0 -119
  220. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_settype.c +0 -143
  221. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_num_processors_np.c +0 -56
  222. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_once.c +0 -79
  223. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_destroy.c +0 -143
  224. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_init.c +0 -109
  225. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_rdlock.c +0 -102
  226. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedrdlock.c +0 -109
  227. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedwrlock.c +0 -139
  228. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_tryrdlock.c +0 -102
  229. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_trywrlock.c +0 -122
  230. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_unlock.c +0 -93
  231. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_wrlock.c +0 -133
  232. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_destroy.c +0 -84
  233. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_getpshared.c +0 -97
  234. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_init.c +0 -83
  235. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_setpshared.c +0 -120
  236. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_self.c +0 -141
  237. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcancelstate.c +0 -125
  238. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcanceltype.c +0 -126
  239. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setconcurrency.c +0 -53
  240. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setschedparam.c +0 -123
  241. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setspecific.c +0 -167
  242. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_destroy.c +0 -111
  243. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_init.c +0 -123
  244. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_lock.c +0 -80
  245. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_trylock.c +0 -77
  246. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_unlock.c +0 -71
  247. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_testcancel.c +0 -103
  248. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_timechange_handler_np.c +0 -108
  249. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_win32_attach_detach_np.c +0 -258
  250. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_MCS_lock.c +0 -278
  251. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_callUserDestroyRoutines.c +0 -232
  252. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_calloc.c +0 -56
  253. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_cond_check_need_init.c +0 -78
  254. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_getprocessors.c +0 -91
  255. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_is_attr.c +0 -47
  256. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_mutex_check_need_init.c +0 -92
  257. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_new.c +0 -94
  258. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processInitialize.c +0 -92
  259. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processTerminate.c +0 -105
  260. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_relmillisecs.c +0 -132
  261. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_reuse.c +0 -151
  262. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_cancelwrwait.c +0 -50
  263. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_check_need_init.c +0 -77
  264. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_semwait.c +0 -135
  265. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_spinlock_check_need_init.c +0 -78
  266. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadDestroy.c +0 -79
  267. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadStart.c +0 -357
  268. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_throw.c +0 -189
  269. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_timespec.c +0 -83
  270. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocCreate.c +0 -118
  271. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocDestroy.c +0 -114
  272. data/ext/noderb_extension/libuv/deps/pthread-win32/rwlock.c +0 -51
  273. data/ext/noderb_extension/libuv/deps/pthread-win32/sched.c +0 -53
  274. data/ext/noderb_extension/libuv/deps/pthread-win32/sched.h +0 -183
  275. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_max.c +0 -134
  276. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_min.c +0 -135
  277. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_getscheduler.c +0 -71
  278. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_setscheduler.c +0 -83
  279. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_yield.c +0 -71
  280. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_close.c +0 -58
  281. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_destroy.c +0 -144
  282. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_getvalue.c +0 -110
  283. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_init.c +0 -169
  284. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_open.c +0 -58
  285. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post.c +0 -128
  286. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post_multiple.c +0 -142
  287. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_timedwait.c +0 -238
  288. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_trywait.c +0 -117
  289. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_unlink.c +0 -58
  290. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_wait.c +0 -187
  291. data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.c +0 -69
  292. data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.h +0 -169
  293. data/ext/noderb_extension/libuv/deps/pthread-win32/signal.c +0 -179
  294. data/ext/noderb_extension/libuv/deps/pthread-win32/spin.c +0 -46
  295. data/ext/noderb_extension/libuv/deps/pthread-win32/sync.c +0 -43
  296. data/ext/noderb_extension/libuv/deps/pthread-win32/tsd.c +0 -44
  297. data/ext/noderb_extension/libuv/deps/pthread-win32/version.rc +0 -388
  298. data/ext/noderb_extension/libuv/deps/pthread-win32/w32_CancelableWait.c +0 -161
  299. data/ext/noderb_extension/libuv/doc/iocp-links.html +0 -574
  300. data/ext/noderb_extension/libuv/src/uv-unix.c +0 -2421
  301. data/ext/noderb_extension/libuv/src/win/ntdll.h +0 -130
  302. /data/ext/noderb_extension/libuv/include/{ev.h → uv-private/ev.h} +0 -0
  303. /data/ext/noderb_extension/libuv/include/{ngx-queue.h → uv-private/ngx-queue.h} +0 -0
  304. /data/ext/noderb_extension/libuv/include/{tree.h → uv-private/tree.h} +0 -0
  305. /data/ext/noderb_extension/libuv/src/{uv-cygwin.c → unix/cygwin.c} +0 -0
  306. /data/ext/noderb_extension/libuv/src/{uv-darwin.c → unix/darwin.c} +0 -0
  307. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/Changes +0 -0
  308. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/LICENSE +0 -0
  309. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/Makefile.am +0 -0
  310. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/aclocal.m4 +0 -0
  311. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/autogen.sh +0 -0
  312. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config.h.in +0 -0
  313. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_cygwin.h +0 -0
  314. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_freebsd.h +0 -0
  315. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_sunos.h +0 -0
  316. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/configure.ac +0 -0
  317. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/demo.c +0 -0
  318. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/ecb.h +0 -0
  319. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.3 +0 -0
  320. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.pod +0 -0
  321. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/libeio.m4 +0 -0
  322. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/xthread.h +0 -0
  323. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Changes +0 -0
  324. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/LICENSE +0 -0
  325. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Makefile.am +0 -0
  326. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Makefile.in +0 -0
  327. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/README +0 -0
  328. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/aclocal.m4 +0 -0
  329. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/autogen.sh +0 -0
  330. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.guess +0 -0
  331. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.h.in +0 -0
  332. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.sub +0 -0
  333. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_cygwin.h +0 -0
  334. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_darwin.h +0 -0
  335. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_freebsd.h +0 -0
  336. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_sunos.h +0 -0
  337. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/configure +0 -0
  338. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/configure.ac +0 -0
  339. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/depcomp +0 -0
  340. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev++.h +0 -0
  341. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.3 +0 -0
  342. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.c +0 -0
  343. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.pod +0 -0
  344. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_epoll.c +0 -0
  345. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_kqueue.c +0 -0
  346. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_poll.c +0 -0
  347. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_port.c +0 -0
  348. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_select.c +0 -0
  349. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_vars.h +0 -0
  350. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_win32.c +0 -0
  351. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_wrap.h +0 -0
  352. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/event.c +0 -0
  353. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/event.h +0 -0
  354. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/install-sh +0 -0
  355. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/libev.m4 +0 -0
  356. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ltmain.sh +0 -0
  357. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/missing +0 -0
  358. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/mkinstalldirs +0 -0
  359. /data/ext/noderb_extension/libuv/src/{uv-freebsd.c → unix/freebsd.c} +0 -0
  360. /data/ext/noderb_extension/libuv/src/{uv-linux.c → unix/linux.c} +0 -0
  361. /data/ext/noderb_extension/libuv/src/{uv-sunos.c → unix/sunos.c} +0 -0
@@ -0,0 +1,592 @@
1
+ /* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
2
+ *
3
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ * of this software and associated documentation files (the "Software"), to
5
+ * deal in the Software without restriction, including without limitation the
6
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ * sell copies of the Software, and to permit persons to whom the Software is
8
+ * furnished to do so, subject to the following conditions:
9
+ *
10
+ * The above copyright notice and this permission notice shall be included in
11
+ * all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ * IN THE SOFTWARE.
20
+ */
21
+
22
+ #include <assert.h>
23
+
24
+ #include "uv.h"
25
+ #include "../uv-common.h"
26
+ #include "internal.h"
27
+ #include <stdio.h>
28
+
29
+ #if 0
30
+ /*
31
+ * Threshold of active udp streams for which to preallocate udp read buffers.
32
+ */
33
+ const unsigned int uv_active_udp_streams_threshold = 0;
34
+
35
+ /* A zero-size buffer for use by uv_udp_read */
36
+ static char uv_zero_[] = "";
37
+ #endif
38
+
39
+ /* Counter to keep track of active udp streams */
40
+ static unsigned int active_udp_streams = 0;
41
+
42
+
43
+ int uv_udp_getsockname(uv_loop_t* loop, uv_udp_t* handle,
44
+ struct sockaddr* name, int* namelen) {
45
+ int result;
46
+
47
+ result = getsockname(handle->socket, name, namelen);
48
+ if (result != 0) {
49
+ uv_set_sys_error(loop, WSAGetLastError());
50
+ return -1;
51
+ }
52
+
53
+ return 0;
54
+ }
55
+
56
+
57
+ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle,
58
+ SOCKET socket) {
59
+ DWORD yes = 1;
60
+
61
+ assert(handle->socket == INVALID_SOCKET);
62
+
63
+ /* Set the socket to nonblocking mode */
64
+ if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) {
65
+ uv_set_sys_error(loop, WSAGetLastError());
66
+ return -1;
67
+ }
68
+
69
+ /* Make the socket non-inheritable */
70
+ if (!SetHandleInformation((HANDLE)socket, HANDLE_FLAG_INHERIT, 0)) {
71
+ uv_set_sys_error(loop, GetLastError());
72
+ return -1;
73
+ }
74
+
75
+ /* Associate it with the I/O completion port. */
76
+ /* Use uv_handle_t pointer as completion key. */
77
+ if (CreateIoCompletionPort((HANDLE)socket,
78
+ loop->iocp,
79
+ (ULONG_PTR)socket,
80
+ 0) == NULL) {
81
+ uv_set_sys_error(loop, GetLastError());
82
+ return -1;
83
+ }
84
+
85
+ if (pSetFileCompletionNotificationModes) {
86
+ if (!pSetFileCompletionNotificationModes((HANDLE)socket,
87
+ FILE_SKIP_SET_EVENT_ON_HANDLE | FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) {
88
+ uv_set_sys_error(loop, GetLastError());
89
+ return -1;
90
+ }
91
+
92
+ handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP;
93
+ }
94
+
95
+ handle->socket = socket;
96
+
97
+ return 0;
98
+ }
99
+
100
+
101
+ int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) {
102
+ handle->type = UV_UDP;
103
+ handle->socket = INVALID_SOCKET;
104
+ handle->reqs_pending = 0;
105
+ handle->loop = loop;
106
+ handle->flags = 0;
107
+
108
+ uv_req_init(loop, (uv_req_t*) &(handle->recv_req));
109
+ handle->recv_req.type = UV_UDP_RECV;
110
+ handle->recv_req.data = handle;
111
+
112
+ uv_ref(loop);
113
+
114
+ loop->counters.handle_init++;
115
+ loop->counters.udp_init++;
116
+
117
+ return 0;
118
+ }
119
+
120
+
121
+ void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle) {
122
+ if (handle->flags & UV_HANDLE_CLOSING &&
123
+ handle->reqs_pending == 0) {
124
+ assert(!(handle->flags & UV_HANDLE_CLOSED));
125
+ handle->flags |= UV_HANDLE_CLOSED;
126
+
127
+ if (handle->close_cb) {
128
+ handle->close_cb((uv_handle_t*)handle);
129
+ }
130
+
131
+ uv_unref(loop);
132
+ }
133
+ }
134
+
135
+
136
+ static int uv__bind(uv_udp_t* handle, int domain, struct sockaddr* addr,
137
+ int addrsize, unsigned int flags) {
138
+ uv_loop_t* loop = handle->loop;
139
+ DWORD err;
140
+ int r;
141
+ SOCKET sock;
142
+
143
+ if ((flags & UV_UDP_IPV6ONLY) && domain != AF_INET6) {
144
+ /* UV_UDP_IPV6ONLY is supported only for IPV6 sockets */
145
+ uv_set_sys_error(loop, UV_EINVAL);
146
+ }
147
+
148
+ if (handle->socket == INVALID_SOCKET) {
149
+ sock = socket(domain, SOCK_DGRAM, 0);
150
+ if (sock == INVALID_SOCKET) {
151
+ uv_set_sys_error(loop, WSAGetLastError());
152
+ return -1;
153
+ }
154
+
155
+ if (uv_udp_set_socket(loop, handle, sock) == -1) {
156
+ closesocket(sock);
157
+ return -1;
158
+ }
159
+ }
160
+
161
+ if (domain == AF_INET6 && !(flags & UV_UDP_IPV6ONLY)) {
162
+ DWORD off = 0;
163
+ /* On windows IPV6ONLY is on by default. */
164
+ /* If the user doesn't specify it libuv turns it off. */
165
+
166
+ /* TODO: how to handle errors? This may fail if there is no ipv4 stack */
167
+ /* available, or when run on XP/2003 which have no support for dualstack */
168
+ /* sockets. For now we're silently ignoring the error. */
169
+ setsockopt(sock,
170
+ IPPROTO_IPV6,
171
+ IPV6_V6ONLY,
172
+ (const char*) &off,
173
+ sizeof off);
174
+ }
175
+
176
+ r = bind(handle->socket, addr, addrsize);
177
+
178
+ if (r == SOCKET_ERROR) {
179
+ err = WSAGetLastError();
180
+ uv_set_sys_error(loop, WSAGetLastError());
181
+ return -1;
182
+ }
183
+
184
+ handle->flags |= UV_HANDLE_BOUND;
185
+
186
+ return 0;
187
+ }
188
+
189
+
190
+ int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr,
191
+ unsigned int flags) {
192
+ uv_loop_t* loop = handle->loop;
193
+
194
+ if (addr.sin_family != AF_INET) {
195
+ uv_set_sys_error(loop, WSAEFAULT);
196
+ return -1;
197
+ }
198
+
199
+ return uv__bind(handle,
200
+ AF_INET,
201
+ (struct sockaddr*) &addr,
202
+ sizeof(struct sockaddr_in),
203
+ flags);
204
+ }
205
+
206
+
207
+ int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr,
208
+ unsigned int flags) {
209
+ uv_loop_t* loop = handle->loop;
210
+
211
+ if (addr.sin6_family != AF_INET6) {
212
+ uv_set_sys_error(loop, WSAEFAULT);
213
+ return -1;
214
+ }
215
+
216
+ if (uv_allow_ipv6) {
217
+ handle->flags |= UV_HANDLE_IPV6;
218
+ return uv__bind(handle,
219
+ AF_INET6,
220
+ (struct sockaddr*) &addr,
221
+ sizeof(struct sockaddr_in6),
222
+ flags);
223
+ } else {
224
+ uv_new_sys_error(WSAEAFNOSUPPORT);
225
+ return -1;
226
+ }
227
+ }
228
+
229
+
230
+ static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) {
231
+ uv_req_t* req;
232
+ uv_buf_t buf;
233
+ DWORD bytes, flags;
234
+ int result;
235
+
236
+ assert(handle->flags & UV_HANDLE_READING);
237
+ assert(!(handle->flags & UV_HANDLE_READ_PENDING));
238
+
239
+ req = &handle->recv_req;
240
+ memset(&req->overlapped, 0, sizeof(req->overlapped));
241
+
242
+ /*
243
+ * Preallocate a read buffer if the number of active streams is below
244
+ * the threshold.
245
+ */
246
+ #if 0
247
+ if (active_udp_streams < uv_active_udp_streams_threshold) {
248
+ handle->flags &= ~UV_HANDLE_ZERO_READ;
249
+ #endif
250
+ handle->recv_buffer = handle->alloc_cb((uv_handle_t*) handle, 65536);
251
+ assert(handle->recv_buffer.len > 0);
252
+
253
+ buf = handle->recv_buffer;
254
+ memset(&handle->recv_from, 0, sizeof handle->recv_from);
255
+ handle->recv_from_len = sizeof handle->recv_from;
256
+ flags = 0;
257
+
258
+ result = WSARecvFrom(handle->socket,
259
+ (WSABUF*) &buf,
260
+ 1,
261
+ &bytes,
262
+ &flags,
263
+ (struct sockaddr*) &handle->recv_from,
264
+ &handle->recv_from_len,
265
+ &req->overlapped,
266
+ NULL);
267
+
268
+ if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) {
269
+ /* Process the req without IOCP. */
270
+ handle->flags |= UV_HANDLE_READ_PENDING;
271
+ req->overlapped.InternalHigh = bytes;
272
+ handle->reqs_pending++;
273
+ uv_insert_pending_req(loop, req);
274
+ } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) {
275
+ /* The req will be processed with IOCP. */
276
+ handle->flags |= UV_HANDLE_READ_PENDING;
277
+ handle->reqs_pending++;
278
+ } else {
279
+ /* Make this req pending reporting an error. */
280
+ SET_REQ_ERROR(req, WSAGetLastError());
281
+ uv_insert_pending_req(loop, req);
282
+ handle->reqs_pending++;
283
+ }
284
+ #if 0
285
+ } else {
286
+ handle->flags |= UV_HANDLE_ZERO_READ;
287
+
288
+ buf.base = (char*) uv_zero_;
289
+ buf.len = 0;
290
+ flags = MSG_PARTIAL;
291
+
292
+ result = WSARecv(handle->socket,
293
+ (WSABUF*) &buf,
294
+ 1,
295
+ &bytes,
296
+ &flags,
297
+ &req->overlapped,
298
+ NULL);
299
+
300
+ if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) {
301
+ /* Process the req without IOCP. */
302
+ handle->flags |= UV_HANDLE_READ_PENDING;
303
+ req->overlapped.InternalHigh = bytes;
304
+ handle->reqs_pending++;
305
+ uv_insert_pending_req(loop, req);
306
+ } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) {
307
+ /* The req will be processed with IOCP. */
308
+ handle->flags |= UV_HANDLE_READ_PENDING;
309
+ handle->reqs_pending++;
310
+ } else {
311
+ /* Make this req pending reporting an error. */
312
+ SET_REQ_ERROR(req, WSAGetLastError());
313
+ uv_insert_pending_req(loop, req);
314
+ handle->reqs_pending++;
315
+ }
316
+ }
317
+ #endif
318
+ }
319
+
320
+
321
+ int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb,
322
+ uv_udp_recv_cb recv_cb) {
323
+ uv_loop_t* loop = handle->loop;
324
+
325
+ if (handle->flags & UV_HANDLE_READING) {
326
+ uv_set_sys_error(loop, WSAEALREADY);
327
+ return -1;
328
+ }
329
+
330
+ if (!(handle->flags & UV_HANDLE_BOUND) &&
331
+ uv_udp_bind(handle, uv_addr_ip4_any_, 0) < 0) {
332
+ return -1;
333
+ }
334
+
335
+ handle->flags |= UV_HANDLE_READING;
336
+ active_udp_streams++;
337
+
338
+ handle->recv_cb = recv_cb;
339
+ handle->alloc_cb = alloc_cb;
340
+
341
+ /* If reading was stopped and then started again, there could stell be a */
342
+ /* recv request pending. */
343
+ if (!(handle->flags & UV_HANDLE_READ_PENDING))
344
+ uv_udp_queue_recv(loop, handle);
345
+
346
+ return 0;
347
+ }
348
+
349
+
350
+ int uv_udp_recv_stop(uv_udp_t* handle) {
351
+ if (handle->flags & UV_HANDLE_READING) {
352
+ handle->flags &= ~UV_HANDLE_READING;
353
+ active_udp_streams--;
354
+ }
355
+
356
+ return 0;
357
+ }
358
+
359
+
360
+ int uv_udp_connect6(uv_connect_t* req, uv_udp_t* handle,
361
+ struct sockaddr_in6 address, uv_connect_cb cb) {
362
+ uv_loop_t* loop = handle->loop;
363
+ int addrsize = sizeof(struct sockaddr_in6);
364
+ BOOL success;
365
+ DWORD bytes;
366
+
367
+ if (!uv_allow_ipv6) {
368
+ uv_new_sys_error(WSAEAFNOSUPPORT);
369
+ return -1;
370
+ }
371
+
372
+ if (address.sin6_family != AF_INET6) {
373
+ uv_set_sys_error(loop, WSAEFAULT);
374
+ return -1;
375
+ }
376
+
377
+ if (!(handle->flags & UV_HANDLE_BOUND) &&
378
+ uv_udp_bind6(handle, uv_addr_ip6_any_, 0) < 0)
379
+ return -1;
380
+
381
+ uv_req_init(loop, (uv_req_t*) req);
382
+ req->type = UV_CONNECT;
383
+ req->handle = (uv_stream_t*) handle;
384
+ req->cb = cb;
385
+ memset(&req->overlapped, 0, sizeof(req->overlapped));
386
+
387
+ success = pConnectEx6(handle->socket,
388
+ (struct sockaddr*) &address,
389
+ addrsize,
390
+ NULL,
391
+ 0,
392
+ &bytes,
393
+ &req->overlapped);
394
+
395
+ if (UV_SUCCEEDED_WITHOUT_IOCP(success)) {
396
+ handle->reqs_pending++;
397
+ uv_insert_pending_req(loop, (uv_req_t*)req);
398
+ } else if (UV_SUCCEEDED_WITH_IOCP(success)) {
399
+ handle->reqs_pending++;
400
+ } else {
401
+ uv_set_sys_error(loop, WSAGetLastError());
402
+ return -1;
403
+ }
404
+
405
+ return 0;
406
+ }
407
+
408
+
409
+ static int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[],
410
+ int bufcnt, struct sockaddr* addr, int addr_len, uv_udp_send_cb cb) {
411
+ uv_loop_t* loop = handle->loop;
412
+ DWORD result, bytes;
413
+
414
+ uv_req_init(loop, (uv_req_t*) req);
415
+ req->type = UV_UDP_SEND;
416
+ req->handle = handle;
417
+ req->cb = cb;
418
+ memset(&req->overlapped, 0, sizeof(req->overlapped));
419
+
420
+ result = WSASendTo(handle->socket,
421
+ (WSABUF*)bufs,
422
+ bufcnt,
423
+ &bytes,
424
+ 0,
425
+ addr,
426
+ addr_len,
427
+ &req->overlapped,
428
+ NULL);
429
+
430
+ if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) {
431
+ /* Request completed immediately. */
432
+ req->queued_bytes = 0;
433
+ handle->reqs_pending++;
434
+ uv_insert_pending_req(loop, (uv_req_t*)req);
435
+ } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) {
436
+ /* Request queued by the kernel. */
437
+ req->queued_bytes = uv_count_bufs(bufs, bufcnt);
438
+ handle->reqs_pending++;
439
+ } else {
440
+ /* Send failed due to an error. */
441
+ uv_set_sys_error(loop, WSAGetLastError());
442
+ return -1;
443
+ }
444
+
445
+ return 0;
446
+ }
447
+
448
+
449
+ int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[],
450
+ int bufcnt, struct sockaddr_in addr, uv_udp_send_cb cb) {
451
+
452
+ if (!(handle->flags & UV_HANDLE_BOUND) &&
453
+ uv_udp_bind(handle, uv_addr_ip4_any_, 0) < 0) {
454
+ return -1;
455
+ }
456
+
457
+ return uv__udp_send(req,
458
+ handle,
459
+ bufs,
460
+ bufcnt,
461
+ (struct sockaddr*) &addr,
462
+ sizeof addr,
463
+ cb);
464
+ }
465
+
466
+
467
+ int uv_udp_send6(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[],
468
+ int bufcnt, struct sockaddr_in6 addr, uv_udp_send_cb cb) {
469
+
470
+ if (!(handle->flags & UV_HANDLE_BOUND) &&
471
+ uv_udp_bind6(handle, uv_addr_ip6_any_, 0) < 0) {
472
+ return -1;
473
+ }
474
+
475
+ return uv__udp_send(req,
476
+ handle,
477
+ bufs,
478
+ bufcnt,
479
+ (struct sockaddr*) &addr,
480
+ sizeof addr,
481
+ cb);
482
+ }
483
+
484
+
485
+ void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle,
486
+ uv_req_t* req) {
487
+ uv_buf_t buf;
488
+ int partial;
489
+
490
+ assert(handle->type == UV_UDP);
491
+
492
+ handle->flags &= ~UV_HANDLE_READ_PENDING;
493
+
494
+ if (!REQ_SUCCESS(req) &&
495
+ GET_REQ_STATUS(req) != STATUS_RECEIVE_EXPEDITED) {
496
+ /* An error occurred doing the read. */
497
+ if ((handle->flags & UV_HANDLE_READING)) {
498
+ loop->last_error = GET_REQ_UV_SOCK_ERROR(req);
499
+ uv_udp_recv_stop(handle);
500
+ #if 0
501
+ buf = (handle->flags & UV_HANDLE_ZERO_READ) ?
502
+ uv_buf_init(NULL, 0) : handle->recv_buffer;
503
+ #else
504
+ buf = handle->recv_buffer;
505
+ #endif
506
+ handle->recv_cb(handle, -1, buf, NULL, 0);
507
+ }
508
+ goto done;
509
+ }
510
+
511
+ #if 0
512
+ if (!(handle->flags & UV_HANDLE_ZERO_READ)) {
513
+ #endif
514
+ /* Successful read */
515
+ partial = (GET_REQ_STATUS(req) == STATUS_RECEIVE_EXPEDITED);
516
+ handle->recv_cb(handle,
517
+ req->overlapped.InternalHigh,
518
+ handle->recv_buffer,
519
+ (struct sockaddr*) &handle->recv_from,
520
+ partial ? UV_UDP_PARTIAL : 0);
521
+ #if 0
522
+ } else {
523
+ DWORD bytes, err, flags;
524
+ struct sockaddr_storage from;
525
+ int from_len;
526
+
527
+ /* Do a nonblocking receive */
528
+ /* TODO: try to read multiple datagrams at once. FIONREAD maybe? */
529
+ buf = handle->alloc_cb((uv_handle_t*) handle, 65536);
530
+ assert(buf.len > 0);
531
+
532
+ memset(&from, 0, sizeof from);
533
+ from_len = sizeof from;
534
+ flags = MSG_PARTIAL;
535
+
536
+ if (WSARecvFrom(handle->socket,
537
+ (WSABUF*)&buf,
538
+ 1,
539
+ &bytes,
540
+ &flags,
541
+ (struct sockaddr*) &from,
542
+ &from_len,
543
+ NULL,
544
+ NULL) != SOCKET_ERROR) {
545
+
546
+ /* Message received */
547
+ handle->recv_cb(handle,
548
+ bytes,
549
+ buf,
550
+ (struct sockaddr*) &from,
551
+ (flags & MSG_PARTIAL) ? UV_UDP_PARTIAL : 0);
552
+ } else {
553
+ err = WSAGetLastError();
554
+ if (err == WSAEWOULDBLOCK) {
555
+ uv_set_sys_error(loop, WSAEWOULDBLOCK);
556
+ handle->recv_cb(handle, 0, buf, NULL, 0);
557
+ } else {
558
+ /* Ouch! serious error. */
559
+ uv_set_sys_error(loop, err);
560
+ handle->recv_cb(handle, -1, buf, NULL, 0);
561
+ }
562
+ }
563
+ }
564
+ #endif
565
+
566
+ done:
567
+ /* Post another read if still reading and not closing. */
568
+ if ((handle->flags & UV_HANDLE_READING) &&
569
+ !(handle->flags & UV_HANDLE_READ_PENDING)) {
570
+ uv_udp_queue_recv(loop, handle);
571
+ }
572
+
573
+ DECREASE_PENDING_REQ_COUNT(handle);
574
+ }
575
+
576
+
577
+ void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle,
578
+ uv_udp_send_t* req) {
579
+ assert(handle->type == UV_UDP);
580
+
581
+ if (req->cb) {
582
+ if (REQ_SUCCESS(req)) {
583
+ req->cb(req, 0);
584
+ } else {
585
+ loop->last_error = GET_REQ_UV_SOCK_ERROR(req);
586
+ req->cb(req, -1);
587
+ }
588
+ }
589
+
590
+ DECREASE_PENDING_REQ_COUNT(handle);
591
+ }
592
+
@@ -27,13 +27,27 @@
27
27
  #include "internal.h"
28
28
 
29
29
 
30
- int uv_utf16_to_utf8(const wchar_t* utf16Buffer, size_t utf16Size, char* utf8Buffer, size_t utf8Size) {
31
- return WideCharToMultiByte(CP_UTF8, 0, utf16Buffer, utf16Size, utf8Buffer, utf8Size, NULL, NULL);
30
+ int uv_utf16_to_utf8(const wchar_t* utf16Buffer, size_t utf16Size,
31
+ char* utf8Buffer, size_t utf8Size) {
32
+ return WideCharToMultiByte(CP_UTF8,
33
+ 0,
34
+ utf16Buffer,
35
+ utf16Size,
36
+ utf8Buffer,
37
+ utf8Size,
38
+ NULL,
39
+ NULL);
32
40
  }
33
41
 
34
42
 
35
- int uv_utf8_to_utf16(const char* utf8Buffer, wchar_t* utf16Buffer, size_t utf16Size) {
36
- return MultiByteToWideChar(CP_UTF8, 0, utf8Buffer, -1, utf16Buffer, utf16Size);
43
+ int uv_utf8_to_utf16(const char* utf8Buffer, wchar_t* utf16Buffer,
44
+ size_t utf16Size) {
45
+ return MultiByteToWideChar(CP_UTF8,
46
+ 0,
47
+ utf8Buffer,
48
+ -1,
49
+ utf16Buffer,
50
+ utf16Size);
37
51
  }
38
52
 
39
53
 
@@ -55,7 +69,7 @@ int uv_exepath(char* buffer, size_t* size) {
55
69
  /* Get the path as UTF-16 */
56
70
  utf16Size = GetModuleFileNameW(NULL, utf16Buffer, *size - 1);
57
71
  if (utf16Size <= 0) {
58
- uv_set_sys_error(GetLastError());
72
+ /* uv_set_sys_error(loop, GetLastError()); */
59
73
  retVal = -1;
60
74
  goto done;
61
75
  }
@@ -65,7 +79,7 @@ int uv_exepath(char* buffer, size_t* size) {
65
79
  /* Convert to UTF-8 */
66
80
  *size = uv_utf16_to_utf8(utf16Buffer, utf16Size, buffer, *size);
67
81
  if (!*size) {
68
- uv_set_sys_error(GetLastError());
82
+ /* uv_set_sys_error(loop, GetLastError()); */
69
83
  retVal = -1;
70
84
  goto done;
71
85
  }
@@ -28,25 +28,42 @@
28
28
 
29
29
  sRtlNtStatusToDosError pRtlNtStatusToDosError;
30
30
  sNtQueryInformationFile pNtQueryInformationFile;
31
+ sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx;
32
+ sSetFileCompletionNotificationModes pSetFileCompletionNotificationModes;
31
33
 
32
34
 
33
35
  void uv_winapi_init() {
34
- HMODULE module;
36
+ HMODULE ntdll_module;
37
+ HMODULE kernel32_module;
35
38
 
36
- module = GetModuleHandleA("ntdll.dll");
37
- if (module == NULL) {
39
+ ntdll_module = GetModuleHandleA("ntdll.dll");
40
+ if (ntdll_module == NULL) {
38
41
  uv_fatal_error(GetLastError(), "GetModuleHandleA");
39
42
  }
40
43
 
41
- pRtlNtStatusToDosError = (sRtlNtStatusToDosError) GetProcAddress(module,
44
+ pRtlNtStatusToDosError = (sRtlNtStatusToDosError) GetProcAddress(
45
+ ntdll_module,
42
46
  "RtlNtStatusToDosError");
43
47
  if (pRtlNtStatusToDosError == NULL) {
44
48
  uv_fatal_error(GetLastError(), "GetProcAddress");
45
49
  }
46
50
 
47
- pNtQueryInformationFile = (sNtQueryInformationFile) GetProcAddress(module,
51
+ pNtQueryInformationFile = (sNtQueryInformationFile) GetProcAddress(
52
+ ntdll_module,
48
53
  "NtQueryInformationFile");
49
54
  if (pNtQueryInformationFile == NULL) {
50
55
  uv_fatal_error(GetLastError(), "GetProcAddress");
51
56
  }
52
- }
57
+
58
+ kernel32_module = GetModuleHandleA("kernel32.dll");
59
+ if (kernel32_module == NULL) {
60
+ uv_fatal_error(GetLastError(), "GetModuleHandleA");
61
+ }
62
+
63
+ pGetQueuedCompletionStatusEx = (sGetQueuedCompletionStatusEx) GetProcAddress(
64
+ kernel32_module,
65
+ "GetQueuedCompletionStatusEx");
66
+
67
+ pSetFileCompletionNotificationModes = (sSetFileCompletionNotificationModes)
68
+ GetProcAddress(kernel32_module, "SetFileCompletionNotificationModes");
69
+ }