asyncengine 0.0.1.testing
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.
- data/README.markdown +0 -0
- data/asyncengine.gemspec +26 -0
- data/ext/asyncengine_ext/asyncengine_ruby.c +82 -0
- data/ext/asyncengine_ext/extconf.rb +47 -0
- data/ext/asyncengine_ext/libuv/AUTHORS +45 -0
- data/ext/asyncengine_ext/libuv/LICENSE +42 -0
- data/ext/asyncengine_ext/libuv/Makefile +119 -0
- data/ext/asyncengine_ext/libuv/README.md +88 -0
- data/ext/asyncengine_ext/libuv/build/gcc_version.py +20 -0
- data/ext/asyncengine_ext/libuv/common.gypi +176 -0
- data/ext/asyncengine_ext/libuv/config-mingw.mk +61 -0
- data/ext/asyncengine_ext/libuv/config-unix.mk +173 -0
- data/ext/asyncengine_ext/libuv/gyp_uv +60 -0
- data/ext/asyncengine_ext/libuv/include/ares.h +591 -0
- data/ext/asyncengine_ext/libuv/include/ares_version.h +24 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/eio.h +403 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/ev.h +838 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/ngx-queue.h +106 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/tree.h +768 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/uv-unix.h +256 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/uv-win.h +458 -0
- data/ext/asyncengine_ext/libuv/include/uv.h +1556 -0
- data/ext/asyncengine_ext/libuv/src/ares/AUTHORS +37 -0
- data/ext/asyncengine_ext/libuv/src/ares/CHANGES +1218 -0
- data/ext/asyncengine_ext/libuv/src/ares/CMakeLists.txt +22 -0
- data/ext/asyncengine_ext/libuv/src/ares/NEWS +21 -0
- data/ext/asyncengine_ext/libuv/src/ares/README +60 -0
- data/ext/asyncengine_ext/libuv/src/ares/README.cares +13 -0
- data/ext/asyncengine_ext/libuv/src/ares/README.msvc +142 -0
- data/ext/asyncengine_ext/libuv/src/ares/README.node +21 -0
- data/ext/asyncengine_ext/libuv/src/ares/RELEASE-NOTES +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/TODO +23 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares__close_sockets.c +66 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares__get_hostent.c +263 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares__read_line.c +71 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares__timeval.c +111 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_cancel.c +63 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_data.c +190 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_data.h +65 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_destroy.c +105 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_dns.h +90 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_expand_name.c +200 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_expand_string.c +75 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_fds.c +63 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_free_hostent.c +42 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_free_string.c +25 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getenv.c +30 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getenv.h +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_gethostbyaddr.c +301 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_gethostbyname.c +523 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getnameinfo.c +427 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getopt.c +122 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getopt.h +53 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getsock.c +72 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_init.c +1809 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_iphlpapi.h +221 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_ipv6.h +78 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_library_init.c +142 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_library_init.h +42 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_llist.c +86 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_llist.h +42 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_mkquery.c +195 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_nowarn.c +181 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_nowarn.h +55 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_options.c +248 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_a_reply.c +263 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_aaaa_reply.c +259 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_mx_reply.c +170 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_ns_reply.c +182 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_ptr_reply.c +217 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_srv_reply.c +179 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_txt_reply.c +201 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_platform.c +11035 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_platform.h +43 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_private.h +355 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_process.c +1295 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_query.c +183 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_rules.h +144 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_search.c +321 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_send.c +134 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_setup.h +199 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strcasecmp.c +66 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strcasecmp.h +30 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strdup.c +42 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strdup.h +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strerror.c +56 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_timeout.c +80 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_version.c +11 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_writev.c +79 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_writev.h +36 -0
- data/ext/asyncengine_ext/libuv/src/ares/bitncmp.c +59 -0
- data/ext/asyncengine_ext/libuv/src/ares/bitncmp.h +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_cygwin/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_darwin/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_freebsd/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_linux/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_netbsd/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_openbsd/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_sunos/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_win32/ares_config.h +369 -0
- data/ext/asyncengine_ext/libuv/src/ares/get_ver.awk +35 -0
- data/ext/asyncengine_ext/libuv/src/ares/inet_net_pton.c +451 -0
- data/ext/asyncengine_ext/libuv/src/ares/inet_net_pton.h +31 -0
- data/ext/asyncengine_ext/libuv/src/ares/inet_ntop.c +208 -0
- data/ext/asyncengine_ext/libuv/src/ares/inet_ntop.h +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/nameser.h +203 -0
- data/ext/asyncengine_ext/libuv/src/ares/setup_once.h +504 -0
- data/ext/asyncengine_ext/libuv/src/ares/windows_port.c +22 -0
- data/ext/asyncengine_ext/libuv/src/unix/async.c +58 -0
- data/ext/asyncengine_ext/libuv/src/unix/cares.c +194 -0
- data/ext/asyncengine_ext/libuv/src/unix/check.c +80 -0
- data/ext/asyncengine_ext/libuv/src/unix/core.c +588 -0
- data/ext/asyncengine_ext/libuv/src/unix/cygwin.c +84 -0
- data/ext/asyncengine_ext/libuv/src/unix/darwin.c +341 -0
- data/ext/asyncengine_ext/libuv/src/unix/dl.c +91 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/Changes +63 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/LICENSE +36 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/Makefile.am +15 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/aclocal.m4 +8957 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/autogen.sh +3 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config.h.in +86 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_cygwin.h +80 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_darwin.h +141 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_freebsd.h +81 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_linux.h +94 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_netbsd.h +81 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_openbsd.h +137 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_sunos.h +84 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/configure.ac +22 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/demo.c +194 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/ecb.h +370 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/eio.3 +3428 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/eio.c +2593 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/eio.pod +969 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/libeio.m4 +195 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/xthread.h +164 -0
- data/ext/asyncengine_ext/libuv/src/unix/error.c +98 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/Changes +388 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/LICENSE +36 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/Makefile.am +18 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/Makefile.in +771 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/README +58 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/aclocal.m4 +8957 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/autogen.sh +6 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config.guess +1526 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config.h.in +125 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config.sub +1658 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_cygwin.h +123 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_darwin.h +122 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_freebsd.h +120 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_linux.h +141 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_netbsd.h +120 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_openbsd.h +126 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_sunos.h +122 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/configure +13037 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/configure.ac +18 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/depcomp +630 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev++.h +816 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev.3 +5311 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev.c +3921 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev.pod +5243 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_epoll.c +266 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_kqueue.c +235 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_poll.c +148 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_port.c +179 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_select.c +310 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_vars.h +203 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_win32.c +153 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_wrap.h +196 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/event.c +402 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/event.h +170 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/install-sh +294 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/libev.m4 +39 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ltmain.sh +8413 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/missing +336 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/mkinstalldirs +111 -0
- data/ext/asyncengine_ext/libuv/src/unix/freebsd.c +312 -0
- data/ext/asyncengine_ext/libuv/src/unix/fs.c +707 -0
- data/ext/asyncengine_ext/libuv/src/unix/idle.c +79 -0
- data/ext/asyncengine_ext/libuv/src/unix/internal.h +161 -0
- data/ext/asyncengine_ext/libuv/src/unix/kqueue.c +127 -0
- data/ext/asyncengine_ext/libuv/src/unix/linux/core.c +474 -0
- data/ext/asyncengine_ext/libuv/src/unix/linux/inotify.c +211 -0
- data/ext/asyncengine_ext/libuv/src/unix/linux/syscalls.c +230 -0
- data/ext/asyncengine_ext/libuv/src/unix/linux/syscalls.h +87 -0
- data/ext/asyncengine_ext/libuv/src/unix/loop.c +58 -0
- data/ext/asyncengine_ext/libuv/src/unix/netbsd.c +108 -0
- data/ext/asyncengine_ext/libuv/src/unix/openbsd.c +295 -0
- data/ext/asyncengine_ext/libuv/src/unix/pipe.c +266 -0
- data/ext/asyncengine_ext/libuv/src/unix/prepare.c +79 -0
- data/ext/asyncengine_ext/libuv/src/unix/process.c +369 -0
- data/ext/asyncengine_ext/libuv/src/unix/stream.c +1033 -0
- data/ext/asyncengine_ext/libuv/src/unix/sunos.c +466 -0
- data/ext/asyncengine_ext/libuv/src/unix/tcp.c +327 -0
- data/ext/asyncengine_ext/libuv/src/unix/thread.c +154 -0
- data/ext/asyncengine_ext/libuv/src/unix/timer.c +127 -0
- data/ext/asyncengine_ext/libuv/src/unix/tty.c +146 -0
- data/ext/asyncengine_ext/libuv/src/unix/udp.c +670 -0
- data/ext/asyncengine_ext/libuv/src/unix/uv-eio.c +124 -0
- data/ext/asyncengine_ext/libuv/src/unix/uv-eio.h +13 -0
- data/ext/asyncengine_ext/libuv/src/uv-common.c +354 -0
- data/ext/asyncengine_ext/libuv/src/uv-common.h +87 -0
- data/ext/asyncengine_ext/libuv/src/win/async.c +127 -0
- data/ext/asyncengine_ext/libuv/src/win/cares.c +290 -0
- data/ext/asyncengine_ext/libuv/src/win/core.c +270 -0
- data/ext/asyncengine_ext/libuv/src/win/dl.c +82 -0
- data/ext/asyncengine_ext/libuv/src/win/error.c +132 -0
- data/ext/asyncengine_ext/libuv/src/win/fs-event.c +514 -0
- data/ext/asyncengine_ext/libuv/src/win/fs.c +1576 -0
- data/ext/asyncengine_ext/libuv/src/win/getaddrinfo.c +372 -0
- data/ext/asyncengine_ext/libuv/src/win/handle.c +225 -0
- data/ext/asyncengine_ext/libuv/src/win/internal.h +352 -0
- data/ext/asyncengine_ext/libuv/src/win/loop-watcher.c +131 -0
- data/ext/asyncengine_ext/libuv/src/win/pipe.c +1661 -0
- data/ext/asyncengine_ext/libuv/src/win/process.c +1140 -0
- data/ext/asyncengine_ext/libuv/src/win/req.c +174 -0
- data/ext/asyncengine_ext/libuv/src/win/stream.c +201 -0
- data/ext/asyncengine_ext/libuv/src/win/tcp.c +1282 -0
- data/ext/asyncengine_ext/libuv/src/win/thread.c +332 -0
- data/ext/asyncengine_ext/libuv/src/win/threadpool.c +73 -0
- data/ext/asyncengine_ext/libuv/src/win/timer.c +276 -0
- data/ext/asyncengine_ext/libuv/src/win/tty.c +1795 -0
- data/ext/asyncengine_ext/libuv/src/win/udp.c +709 -0
- data/ext/asyncengine_ext/libuv/src/win/util.c +719 -0
- data/ext/asyncengine_ext/libuv/src/win/winapi.c +117 -0
- data/ext/asyncengine_ext/libuv/src/win/winapi.h +4419 -0
- data/ext/asyncengine_ext/libuv/src/win/winsock.c +470 -0
- data/ext/asyncengine_ext/libuv/src/win/winsock.h +138 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-ares.c +118 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-getaddrinfo.c +94 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-list.h +105 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-ping-pongs.c +213 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-pound.c +324 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-pump.c +462 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-sizes.c +40 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-spawn.c +156 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-tcp-write-batch.c +140 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-thread.c +64 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-udp-packet-storm.c +247 -0
- data/ext/asyncengine_ext/libuv/test/blackhole-server.c +118 -0
- data/ext/asyncengine_ext/libuv/test/dns-server.c +321 -0
- data/ext/asyncengine_ext/libuv/test/echo-server.c +370 -0
- data/ext/asyncengine_ext/libuv/test/fixtures/empty_file +0 -0
- data/ext/asyncengine_ext/libuv/test/fixtures/load_error.node +1 -0
- data/ext/asyncengine_ext/libuv/test/run-benchmarks.c +64 -0
- data/ext/asyncengine_ext/libuv/test/run-tests.c +108 -0
- data/ext/asyncengine_ext/libuv/test/runner-unix.c +315 -0
- data/ext/asyncengine_ext/libuv/test/runner-unix.h +36 -0
- data/ext/asyncengine_ext/libuv/test/runner-win.c +343 -0
- data/ext/asyncengine_ext/libuv/test/runner-win.h +42 -0
- data/ext/asyncengine_ext/libuv/test/runner.c +317 -0
- data/ext/asyncengine_ext/libuv/test/runner.h +159 -0
- data/ext/asyncengine_ext/libuv/test/task.h +117 -0
- data/ext/asyncengine_ext/libuv/test/test-async.c +216 -0
- data/ext/asyncengine_ext/libuv/test/test-callback-stack.c +203 -0
- data/ext/asyncengine_ext/libuv/test/test-connection-fail.c +148 -0
- data/ext/asyncengine_ext/libuv/test/test-counters-init.c +216 -0
- data/ext/asyncengine_ext/libuv/test/test-cwd-and-chdir.c +64 -0
- data/ext/asyncengine_ext/libuv/test/test-delayed-accept.c +197 -0
- data/ext/asyncengine_ext/libuv/test/test-dlerror.c +49 -0
- data/ext/asyncengine_ext/libuv/test/test-eio-overflow.c +90 -0
- data/ext/asyncengine_ext/libuv/test/test-error.c +59 -0
- data/ext/asyncengine_ext/libuv/test/test-fail-always.c +29 -0
- data/ext/asyncengine_ext/libuv/test/test-fs-event.c +442 -0
- data/ext/asyncengine_ext/libuv/test/test-fs.c +1731 -0
- data/ext/asyncengine_ext/libuv/test/test-get-currentexe.c +63 -0
- data/ext/asyncengine_ext/libuv/test/test-get-loadavg.c +36 -0
- data/ext/asyncengine_ext/libuv/test/test-get-memory.c +38 -0
- data/ext/asyncengine_ext/libuv/test/test-getaddrinfo.c +122 -0
- data/ext/asyncengine_ext/libuv/test/test-gethostbyname.c +189 -0
- data/ext/asyncengine_ext/libuv/test/test-getsockname.c +342 -0
- data/ext/asyncengine_ext/libuv/test/test-hrtime.c +51 -0
- data/ext/asyncengine_ext/libuv/test/test-idle.c +81 -0
- data/ext/asyncengine_ext/libuv/test/test-ipc-send-recv.c +209 -0
- data/ext/asyncengine_ext/libuv/test/test-ipc.c +614 -0
- data/ext/asyncengine_ext/libuv/test/test-list.h +371 -0
- data/ext/asyncengine_ext/libuv/test/test-loop-handles.c +359 -0
- data/ext/asyncengine_ext/libuv/test/test-multiple-listen.c +102 -0
- data/ext/asyncengine_ext/libuv/test/test-mutexes.c +63 -0
- data/ext/asyncengine_ext/libuv/test/test-pass-always.c +28 -0
- data/ext/asyncengine_ext/libuv/test/test-ping-pong.c +253 -0
- data/ext/asyncengine_ext/libuv/test/test-pipe-bind-error.c +140 -0
- data/ext/asyncengine_ext/libuv/test/test-pipe-connect-error.c +96 -0
- data/ext/asyncengine_ext/libuv/test/test-platform-output.c +87 -0
- data/ext/asyncengine_ext/libuv/test/test-process-title.c +42 -0
- data/ext/asyncengine_ext/libuv/test/test-ref.c +322 -0
- data/ext/asyncengine_ext/libuv/test/test-run-once.c +44 -0
- data/ext/asyncengine_ext/libuv/test/test-shutdown-close.c +103 -0
- data/ext/asyncengine_ext/libuv/test/test-shutdown-eof.c +183 -0
- data/ext/asyncengine_ext/libuv/test/test-spawn.c +499 -0
- data/ext/asyncengine_ext/libuv/test/test-stdio-over-pipes.c +256 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-bind-error.c +191 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-bind6-error.c +154 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-close.c +129 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-connect-error.c +70 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-connect6-error.c +68 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-flags.c +51 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-write-error.c +168 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-write-to-half-open-connection.c +135 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-writealot.c +195 -0
- data/ext/asyncengine_ext/libuv/test/test-thread.c +183 -0
- data/ext/asyncengine_ext/libuv/test/test-threadpool.c +57 -0
- data/ext/asyncengine_ext/libuv/test/test-timer-again.c +141 -0
- data/ext/asyncengine_ext/libuv/test/test-timer.c +130 -0
- data/ext/asyncengine_ext/libuv/test/test-tty.c +110 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-dgram-too-big.c +86 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-ipv6.c +156 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-multicast-join.c +139 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-multicast-ttl.c +86 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-options.c +86 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-send-and-recv.c +208 -0
- data/ext/asyncengine_ext/libuv/test/test-util.c +97 -0
- data/ext/asyncengine_ext/libuv/uv.gyp +435 -0
- data/ext/asyncengine_ext/libuv/vcbuild.bat +105 -0
- data/lib/asyncengine/version.rb +3 -0
- data/lib/asyncengine.rb +41 -0
- metadata +384 -0
@@ -0,0 +1,372 @@
|
|
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
|
+
#include <malloc.h>
|
24
|
+
|
25
|
+
#include "uv.h"
|
26
|
+
#include "internal.h"
|
27
|
+
|
28
|
+
|
29
|
+
/*
|
30
|
+
* MinGW is missing this
|
31
|
+
*/
|
32
|
+
#if !defined(_MSC_VER) && !defined(__MINGW64_VERSION_MAJOR)
|
33
|
+
typedef struct addrinfoW {
|
34
|
+
int ai_flags;
|
35
|
+
int ai_family;
|
36
|
+
int ai_socktype;
|
37
|
+
int ai_protocol;
|
38
|
+
size_t ai_addrlen;
|
39
|
+
wchar_t* ai_canonname;
|
40
|
+
struct sockaddr* ai_addr;
|
41
|
+
struct addrinfoW* ai_next;
|
42
|
+
} ADDRINFOW, *PADDRINFOW;
|
43
|
+
|
44
|
+
DECLSPEC_IMPORT int WSAAPI GetAddrInfoW(const wchar_t* node,
|
45
|
+
const wchar_t* service,
|
46
|
+
const ADDRINFOW* hints,
|
47
|
+
PADDRINFOW* result);
|
48
|
+
|
49
|
+
DECLSPEC_IMPORT void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo);
|
50
|
+
#endif
|
51
|
+
|
52
|
+
|
53
|
+
/* adjust size value to be multiple of 4. Use to keep pointer aligned */
|
54
|
+
/* Do we need different versions of this for different architectures? */
|
55
|
+
#define ALIGNED_SIZE(X) ((((X) + 3) >> 2) << 2)
|
56
|
+
|
57
|
+
|
58
|
+
/*
|
59
|
+
* getaddrinfo error code mapping
|
60
|
+
* Falls back to uv_translate_sys_error if no match
|
61
|
+
*/
|
62
|
+
static uv_err_code uv_translate_eai_error(int eai_errno) {
|
63
|
+
switch (eai_errno) {
|
64
|
+
case ERROR_SUCCESS: return UV_OK;
|
65
|
+
case EAI_BADFLAGS: return UV_EBADF;
|
66
|
+
case EAI_FAIL: return UV_EFAULT;
|
67
|
+
case EAI_FAMILY: return UV_EAIFAMNOSUPPORT;
|
68
|
+
case EAI_MEMORY: return UV_ENOMEM;
|
69
|
+
case EAI_NONAME: return UV_ENOENT;
|
70
|
+
case EAI_AGAIN: return UV_EAGAIN;
|
71
|
+
case EAI_SERVICE: return UV_EAISERVICE;
|
72
|
+
case EAI_SOCKTYPE: return UV_EAISOCKTYPE;
|
73
|
+
default: return uv_translate_sys_error(eai_errno);
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
|
78
|
+
/* getaddrinfo worker thread implementation */
|
79
|
+
static DWORD WINAPI getaddrinfo_thread_proc(void* parameter) {
|
80
|
+
uv_getaddrinfo_t* handle = (uv_getaddrinfo_t*) parameter;
|
81
|
+
uv_loop_t* loop = handle->loop;
|
82
|
+
int ret;
|
83
|
+
|
84
|
+
assert(handle != NULL);
|
85
|
+
|
86
|
+
if (handle != NULL) {
|
87
|
+
/* call OS function on this thread */
|
88
|
+
ret = GetAddrInfoW(handle->node,
|
89
|
+
handle->service,
|
90
|
+
handle->hints,
|
91
|
+
&handle->res);
|
92
|
+
handle->retcode = ret;
|
93
|
+
|
94
|
+
/* post getaddrinfo completed */
|
95
|
+
POST_COMPLETION_FOR_REQ(loop, &handle->getadddrinfo_req);
|
96
|
+
}
|
97
|
+
|
98
|
+
return 0;
|
99
|
+
}
|
100
|
+
|
101
|
+
|
102
|
+
/*
|
103
|
+
* Called from uv_run when complete. Call user specified callback
|
104
|
+
* then free returned addrinfo
|
105
|
+
* Returned addrinfo strings are converted from UTF-16 to UTF-8.
|
106
|
+
*
|
107
|
+
* To minimize allocation we calculate total size required,
|
108
|
+
* and copy all structs and referenced strings into the one block.
|
109
|
+
* Each size calculation is adjusted to avoid unaligned pointers.
|
110
|
+
*/
|
111
|
+
void uv_process_getaddrinfo_req(uv_loop_t* loop, uv_getaddrinfo_t* handle,
|
112
|
+
uv_req_t* req) {
|
113
|
+
int addrinfo_len = 0;
|
114
|
+
int name_len = 0;
|
115
|
+
size_t addrinfo_struct_len = ALIGNED_SIZE(sizeof(struct addrinfo));
|
116
|
+
struct addrinfoW* addrinfow_ptr;
|
117
|
+
struct addrinfo* addrinfo_ptr;
|
118
|
+
char* alloc_ptr = NULL;
|
119
|
+
char* cur_ptr = NULL;
|
120
|
+
int status = 0;
|
121
|
+
|
122
|
+
/* release input parameter memory */
|
123
|
+
if (handle->alloc != NULL) {
|
124
|
+
free(handle->alloc);
|
125
|
+
handle->alloc = NULL;
|
126
|
+
}
|
127
|
+
|
128
|
+
if (handle->retcode == 0) {
|
129
|
+
/* convert addrinfoW to addrinfo */
|
130
|
+
/* first calculate required length */
|
131
|
+
addrinfow_ptr = handle->res;
|
132
|
+
while (addrinfow_ptr != NULL) {
|
133
|
+
addrinfo_len += addrinfo_struct_len +
|
134
|
+
ALIGNED_SIZE(addrinfow_ptr->ai_addrlen);
|
135
|
+
if (addrinfow_ptr->ai_canonname != NULL) {
|
136
|
+
name_len = uv_utf16_to_utf8(addrinfow_ptr->ai_canonname, -1, NULL, 0);
|
137
|
+
if (name_len == 0) {
|
138
|
+
uv__set_sys_error(loop, GetLastError());
|
139
|
+
status = -1;
|
140
|
+
goto complete;
|
141
|
+
}
|
142
|
+
addrinfo_len += ALIGNED_SIZE(name_len);
|
143
|
+
}
|
144
|
+
addrinfow_ptr = addrinfow_ptr->ai_next;
|
145
|
+
}
|
146
|
+
|
147
|
+
/* allocate memory for addrinfo results */
|
148
|
+
alloc_ptr = (char*)malloc(addrinfo_len);
|
149
|
+
|
150
|
+
/* do conversions */
|
151
|
+
if (alloc_ptr != NULL) {
|
152
|
+
cur_ptr = alloc_ptr;
|
153
|
+
addrinfow_ptr = handle->res;
|
154
|
+
|
155
|
+
while (addrinfow_ptr != NULL) {
|
156
|
+
/* copy addrinfo struct data */
|
157
|
+
assert(cur_ptr + addrinfo_struct_len <= alloc_ptr + addrinfo_len);
|
158
|
+
addrinfo_ptr = (struct addrinfo*)cur_ptr;
|
159
|
+
addrinfo_ptr->ai_family = addrinfow_ptr->ai_family;
|
160
|
+
addrinfo_ptr->ai_socktype = addrinfow_ptr->ai_socktype;
|
161
|
+
addrinfo_ptr->ai_protocol = addrinfow_ptr->ai_protocol;
|
162
|
+
addrinfo_ptr->ai_flags = addrinfow_ptr->ai_flags;
|
163
|
+
addrinfo_ptr->ai_addrlen = addrinfow_ptr->ai_addrlen;
|
164
|
+
addrinfo_ptr->ai_canonname = NULL;
|
165
|
+
addrinfo_ptr->ai_addr = NULL;
|
166
|
+
addrinfo_ptr->ai_next = NULL;
|
167
|
+
|
168
|
+
cur_ptr += addrinfo_struct_len;
|
169
|
+
|
170
|
+
/* copy sockaddr */
|
171
|
+
if (addrinfo_ptr->ai_addrlen > 0) {
|
172
|
+
assert(cur_ptr + addrinfo_ptr->ai_addrlen <=
|
173
|
+
alloc_ptr + addrinfo_len);
|
174
|
+
memcpy(cur_ptr, addrinfow_ptr->ai_addr, addrinfo_ptr->ai_addrlen);
|
175
|
+
addrinfo_ptr->ai_addr = (struct sockaddr*)cur_ptr;
|
176
|
+
cur_ptr += ALIGNED_SIZE(addrinfo_ptr->ai_addrlen);
|
177
|
+
}
|
178
|
+
|
179
|
+
/* convert canonical name to UTF-8 */
|
180
|
+
if (addrinfow_ptr->ai_canonname != NULL) {
|
181
|
+
name_len = uv_utf16_to_utf8(addrinfow_ptr->ai_canonname,
|
182
|
+
-1,
|
183
|
+
NULL,
|
184
|
+
0);
|
185
|
+
assert(name_len > 0);
|
186
|
+
assert(cur_ptr + name_len <= alloc_ptr + addrinfo_len);
|
187
|
+
name_len = uv_utf16_to_utf8(addrinfow_ptr->ai_canonname,
|
188
|
+
-1,
|
189
|
+
cur_ptr,
|
190
|
+
name_len);
|
191
|
+
assert(name_len > 0);
|
192
|
+
addrinfo_ptr->ai_canonname = cur_ptr;
|
193
|
+
cur_ptr += ALIGNED_SIZE(name_len);
|
194
|
+
}
|
195
|
+
assert(cur_ptr <= alloc_ptr + addrinfo_len);
|
196
|
+
|
197
|
+
/* set next ptr */
|
198
|
+
addrinfow_ptr = addrinfow_ptr->ai_next;
|
199
|
+
if (addrinfow_ptr != NULL) {
|
200
|
+
addrinfo_ptr->ai_next = (struct addrinfo*)cur_ptr;
|
201
|
+
}
|
202
|
+
}
|
203
|
+
} else {
|
204
|
+
uv__set_artificial_error(loop, UV_ENOMEM);
|
205
|
+
status = -1;
|
206
|
+
}
|
207
|
+
} else {
|
208
|
+
/* GetAddrInfo failed */
|
209
|
+
uv__set_artificial_error(loop, uv_translate_eai_error(handle->retcode));
|
210
|
+
status = -1;
|
211
|
+
}
|
212
|
+
|
213
|
+
/* return memory to system */
|
214
|
+
if (handle->res != NULL) {
|
215
|
+
FreeAddrInfoW(handle->res);
|
216
|
+
handle->res = NULL;
|
217
|
+
}
|
218
|
+
|
219
|
+
complete:
|
220
|
+
/* finally do callback with converted result */
|
221
|
+
handle->getaddrinfo_cb(handle, status, (struct addrinfo*)alloc_ptr);
|
222
|
+
|
223
|
+
uv_unref(loop);
|
224
|
+
}
|
225
|
+
|
226
|
+
|
227
|
+
void uv_freeaddrinfo(struct addrinfo* ai) {
|
228
|
+
char* alloc_ptr = (char*)ai;
|
229
|
+
|
230
|
+
/* release copied result memory */
|
231
|
+
if (alloc_ptr != NULL) {
|
232
|
+
free(alloc_ptr);
|
233
|
+
}
|
234
|
+
}
|
235
|
+
|
236
|
+
|
237
|
+
/*
|
238
|
+
* Entry point for getaddrinfo
|
239
|
+
* we convert the UTF-8 strings to UNICODE
|
240
|
+
* and save the UNICODE string pointers in the handle
|
241
|
+
* We also copy hints so that caller does not need to keep memory until the
|
242
|
+
* callback.
|
243
|
+
* return UV_OK if a callback will be made
|
244
|
+
* return error code if validation fails
|
245
|
+
*
|
246
|
+
* To minimize allocation we calculate total size required,
|
247
|
+
* and copy all structs and referenced strings into the one block.
|
248
|
+
* Each size calculation is adjusted to avoid unaligned pointers.
|
249
|
+
*/
|
250
|
+
int uv_getaddrinfo(uv_loop_t* loop,
|
251
|
+
uv_getaddrinfo_t* handle,
|
252
|
+
uv_getaddrinfo_cb getaddrinfo_cb,
|
253
|
+
const char* node,
|
254
|
+
const char* service,
|
255
|
+
const struct addrinfo* hints) {
|
256
|
+
int nodesize = 0;
|
257
|
+
int servicesize = 0;
|
258
|
+
int hintssize = 0;
|
259
|
+
char* alloc_ptr = NULL;
|
260
|
+
|
261
|
+
if (handle == NULL || getaddrinfo_cb == NULL ||
|
262
|
+
(node == NULL && service == NULL)) {
|
263
|
+
uv__set_sys_error(loop, WSAEINVAL);
|
264
|
+
goto error;
|
265
|
+
}
|
266
|
+
|
267
|
+
uv_req_init(loop, (uv_req_t*)handle);
|
268
|
+
|
269
|
+
handle->getaddrinfo_cb = getaddrinfo_cb;
|
270
|
+
handle->res = NULL;
|
271
|
+
handle->type = UV_GETADDRINFO;
|
272
|
+
handle->loop = loop;
|
273
|
+
|
274
|
+
/* calculate required memory size for all input values */
|
275
|
+
if (node != NULL) {
|
276
|
+
nodesize = ALIGNED_SIZE(uv_utf8_to_utf16(node, NULL, 0) * sizeof(wchar_t));
|
277
|
+
if (nodesize == 0) {
|
278
|
+
uv__set_sys_error(loop, GetLastError());
|
279
|
+
goto error;
|
280
|
+
}
|
281
|
+
}
|
282
|
+
|
283
|
+
if (service != NULL) {
|
284
|
+
servicesize = ALIGNED_SIZE(uv_utf8_to_utf16(service, NULL, 0) *
|
285
|
+
sizeof(wchar_t));
|
286
|
+
if (servicesize == 0) {
|
287
|
+
uv__set_sys_error(loop, GetLastError());
|
288
|
+
goto error;
|
289
|
+
}
|
290
|
+
}
|
291
|
+
if (hints != NULL) {
|
292
|
+
hintssize = ALIGNED_SIZE(sizeof(struct addrinfoW));
|
293
|
+
}
|
294
|
+
|
295
|
+
/* allocate memory for inputs, and partition it as needed */
|
296
|
+
alloc_ptr = (char*)malloc(nodesize + servicesize + hintssize);
|
297
|
+
if (!alloc_ptr) {
|
298
|
+
uv__set_sys_error(loop, WSAENOBUFS);
|
299
|
+
goto error;
|
300
|
+
}
|
301
|
+
|
302
|
+
/* save alloc_ptr now so we can free if error */
|
303
|
+
handle->alloc = (void*)alloc_ptr;
|
304
|
+
|
305
|
+
/* convert node string to UTF16 into allocated memory and save pointer in */
|
306
|
+
/* handle */
|
307
|
+
if (node != NULL) {
|
308
|
+
handle->node = (wchar_t*)alloc_ptr;
|
309
|
+
if (uv_utf8_to_utf16(node,
|
310
|
+
(wchar_t*) alloc_ptr,
|
311
|
+
nodesize / sizeof(wchar_t)) == 0) {
|
312
|
+
uv__set_sys_error(loop, GetLastError());
|
313
|
+
goto error;
|
314
|
+
}
|
315
|
+
alloc_ptr += nodesize;
|
316
|
+
} else {
|
317
|
+
handle->node = NULL;
|
318
|
+
}
|
319
|
+
|
320
|
+
/* convert service string to UTF16 into allocated memory and save pointer */
|
321
|
+
/* in handle */
|
322
|
+
if (service != NULL) {
|
323
|
+
handle->service = (wchar_t*)alloc_ptr;
|
324
|
+
if (uv_utf8_to_utf16(service,
|
325
|
+
(wchar_t*) alloc_ptr,
|
326
|
+
servicesize / sizeof(wchar_t)) == 0) {
|
327
|
+
uv__set_sys_error(loop, GetLastError());
|
328
|
+
goto error;
|
329
|
+
}
|
330
|
+
alloc_ptr += servicesize;
|
331
|
+
} else {
|
332
|
+
handle->service = NULL;
|
333
|
+
}
|
334
|
+
|
335
|
+
/* copy hints to allocated memory and save pointer in handle */
|
336
|
+
if (hints != NULL) {
|
337
|
+
handle->hints = (struct addrinfoW*)alloc_ptr;
|
338
|
+
handle->hints->ai_family = hints->ai_family;
|
339
|
+
handle->hints->ai_socktype = hints->ai_socktype;
|
340
|
+
handle->hints->ai_protocol = hints->ai_protocol;
|
341
|
+
handle->hints->ai_flags = hints->ai_flags;
|
342
|
+
handle->hints->ai_addrlen = 0;
|
343
|
+
handle->hints->ai_canonname = NULL;
|
344
|
+
handle->hints->ai_addr = NULL;
|
345
|
+
handle->hints->ai_next = NULL;
|
346
|
+
} else {
|
347
|
+
handle->hints = NULL;
|
348
|
+
}
|
349
|
+
|
350
|
+
/* init request for Post handling */
|
351
|
+
uv_req_init(loop, &handle->getadddrinfo_req);
|
352
|
+
handle->getadddrinfo_req.data = handle;
|
353
|
+
handle->getadddrinfo_req.type = UV_GETADDRINFO_REQ;
|
354
|
+
|
355
|
+
/* Ask thread to run. Treat this as a long operation */
|
356
|
+
if (QueueUserWorkItem(&getaddrinfo_thread_proc,
|
357
|
+
handle,
|
358
|
+
WT_EXECUTELONGFUNCTION) == 0) {
|
359
|
+
uv__set_sys_error(loop, GetLastError());
|
360
|
+
goto error;
|
361
|
+
}
|
362
|
+
|
363
|
+
uv_ref(loop);
|
364
|
+
|
365
|
+
return 0;
|
366
|
+
|
367
|
+
error:
|
368
|
+
if (handle != NULL && handle->alloc != NULL) {
|
369
|
+
free(handle->alloc);
|
370
|
+
}
|
371
|
+
return -1;
|
372
|
+
}
|
@@ -0,0 +1,225 @@
|
|
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
|
+
#include <io.h>
|
24
|
+
|
25
|
+
#include "uv.h"
|
26
|
+
#include "internal.h"
|
27
|
+
|
28
|
+
|
29
|
+
uv_handle_type uv_guess_handle(uv_file file) {
|
30
|
+
HANDLE handle;
|
31
|
+
DWORD mode;
|
32
|
+
|
33
|
+
if (file < 0) {
|
34
|
+
return UV_UNKNOWN_HANDLE;
|
35
|
+
}
|
36
|
+
|
37
|
+
handle = (HANDLE) _get_osfhandle(file);
|
38
|
+
|
39
|
+
switch (GetFileType(handle)) {
|
40
|
+
case FILE_TYPE_CHAR:
|
41
|
+
if (GetConsoleMode(handle, &mode)) {
|
42
|
+
return UV_TTY;
|
43
|
+
} else {
|
44
|
+
return UV_FILE;
|
45
|
+
}
|
46
|
+
|
47
|
+
case FILE_TYPE_PIPE:
|
48
|
+
return UV_NAMED_PIPE;
|
49
|
+
|
50
|
+
case FILE_TYPE_DISK:
|
51
|
+
return UV_FILE;
|
52
|
+
|
53
|
+
default:
|
54
|
+
return UV_UNKNOWN_HANDLE;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
|
59
|
+
int uv_is_active(uv_handle_t* handle) {
|
60
|
+
switch (handle->type) {
|
61
|
+
case UV_TIMER:
|
62
|
+
case UV_IDLE:
|
63
|
+
case UV_PREPARE:
|
64
|
+
case UV_CHECK:
|
65
|
+
return (handle->flags & UV_HANDLE_ACTIVE) ? 1 : 0;
|
66
|
+
|
67
|
+
default:
|
68
|
+
return 1;
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
|
73
|
+
void uv_close(uv_handle_t* handle, uv_close_cb cb) {
|
74
|
+
uv_pipe_t* pipe;
|
75
|
+
uv_udp_t* udp;
|
76
|
+
uv_process_t* process;
|
77
|
+
|
78
|
+
uv_loop_t* loop = handle->loop;
|
79
|
+
|
80
|
+
if (handle->flags & UV_HANDLE_CLOSING) {
|
81
|
+
return;
|
82
|
+
}
|
83
|
+
|
84
|
+
handle->flags |= UV_HANDLE_CLOSING;
|
85
|
+
handle->close_cb = cb;
|
86
|
+
|
87
|
+
/* Handle-specific close actions */
|
88
|
+
switch (handle->type) {
|
89
|
+
case UV_TCP:
|
90
|
+
uv_tcp_close((uv_tcp_t*)handle);
|
91
|
+
return;
|
92
|
+
|
93
|
+
case UV_NAMED_PIPE:
|
94
|
+
pipe = (uv_pipe_t*)handle;
|
95
|
+
pipe->flags &= ~(UV_HANDLE_READING | UV_HANDLE_LISTENING);
|
96
|
+
close_pipe(pipe, NULL, NULL);
|
97
|
+
if (pipe->reqs_pending == 0) {
|
98
|
+
uv_want_endgame(loop, handle);
|
99
|
+
}
|
100
|
+
return;
|
101
|
+
|
102
|
+
case UV_TTY:
|
103
|
+
uv_tty_close((uv_tty_t*) handle);
|
104
|
+
return;
|
105
|
+
|
106
|
+
case UV_UDP:
|
107
|
+
udp = (uv_udp_t*) handle;
|
108
|
+
uv_udp_recv_stop(udp);
|
109
|
+
closesocket(udp->socket);
|
110
|
+
if (udp->reqs_pending == 0) {
|
111
|
+
uv_want_endgame(loop, handle);
|
112
|
+
}
|
113
|
+
return;
|
114
|
+
|
115
|
+
case UV_TIMER:
|
116
|
+
uv_timer_stop((uv_timer_t*)handle);
|
117
|
+
uv_want_endgame(loop, handle);
|
118
|
+
return;
|
119
|
+
|
120
|
+
case UV_PREPARE:
|
121
|
+
uv_prepare_stop((uv_prepare_t*)handle);
|
122
|
+
uv_want_endgame(loop, handle);
|
123
|
+
return;
|
124
|
+
|
125
|
+
case UV_CHECK:
|
126
|
+
uv_check_stop((uv_check_t*)handle);
|
127
|
+
uv_want_endgame(loop, handle);
|
128
|
+
return;
|
129
|
+
|
130
|
+
case UV_IDLE:
|
131
|
+
uv_idle_stop((uv_idle_t*)handle);
|
132
|
+
uv_want_endgame(loop, handle);
|
133
|
+
return;
|
134
|
+
|
135
|
+
case UV_ASYNC:
|
136
|
+
if (!((uv_async_t*)handle)->async_sent) {
|
137
|
+
uv_want_endgame(loop, handle);
|
138
|
+
}
|
139
|
+
return;
|
140
|
+
|
141
|
+
case UV_PROCESS:
|
142
|
+
process = (uv_process_t*)handle;
|
143
|
+
uv_process_close(loop, process);
|
144
|
+
return;
|
145
|
+
|
146
|
+
case UV_FS_EVENT:
|
147
|
+
uv_fs_event_close(loop, (uv_fs_event_t*)handle);
|
148
|
+
return;
|
149
|
+
|
150
|
+
default:
|
151
|
+
/* Not supported */
|
152
|
+
abort();
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
|
157
|
+
int uv_is_closing(uv_handle_t* handle) {
|
158
|
+
return handle->flags & (UV_HANDLE_CLOSING | UV_HANDLE_CLOSED);
|
159
|
+
}
|
160
|
+
|
161
|
+
|
162
|
+
void uv_want_endgame(uv_loop_t* loop, uv_handle_t* handle) {
|
163
|
+
if (!(handle->flags & UV_HANDLE_ENDGAME_QUEUED)) {
|
164
|
+
handle->flags |= UV_HANDLE_ENDGAME_QUEUED;
|
165
|
+
|
166
|
+
handle->endgame_next = loop->endgame_handles;
|
167
|
+
loop->endgame_handles = handle;
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
|
172
|
+
void uv_process_endgames(uv_loop_t* loop) {
|
173
|
+
uv_handle_t* handle;
|
174
|
+
|
175
|
+
while (loop->endgame_handles && loop->refs > 0) {
|
176
|
+
handle = loop->endgame_handles;
|
177
|
+
loop->endgame_handles = handle->endgame_next;
|
178
|
+
|
179
|
+
handle->flags &= ~UV_HANDLE_ENDGAME_QUEUED;
|
180
|
+
|
181
|
+
switch (handle->type) {
|
182
|
+
case UV_TCP:
|
183
|
+
uv_tcp_endgame(loop, (uv_tcp_t*) handle);
|
184
|
+
break;
|
185
|
+
|
186
|
+
case UV_NAMED_PIPE:
|
187
|
+
uv_pipe_endgame(loop, (uv_pipe_t*) handle);
|
188
|
+
break;
|
189
|
+
|
190
|
+
case UV_TTY:
|
191
|
+
uv_tty_endgame(loop, (uv_tty_t*) handle);
|
192
|
+
break;
|
193
|
+
|
194
|
+
case UV_UDP:
|
195
|
+
uv_udp_endgame(loop, (uv_udp_t*) handle);
|
196
|
+
break;
|
197
|
+
|
198
|
+
case UV_TIMER:
|
199
|
+
uv_timer_endgame(loop, (uv_timer_t*) handle);
|
200
|
+
break;
|
201
|
+
|
202
|
+
case UV_PREPARE:
|
203
|
+
case UV_CHECK:
|
204
|
+
case UV_IDLE:
|
205
|
+
uv_loop_watcher_endgame(loop, handle);
|
206
|
+
break;
|
207
|
+
|
208
|
+
case UV_ASYNC:
|
209
|
+
uv_async_endgame(loop, (uv_async_t*) handle);
|
210
|
+
break;
|
211
|
+
|
212
|
+
case UV_PROCESS:
|
213
|
+
uv_process_endgame(loop, (uv_process_t*) handle);
|
214
|
+
break;
|
215
|
+
|
216
|
+
case UV_FS_EVENT:
|
217
|
+
uv_fs_event_endgame(loop, (uv_fs_event_t*) handle);
|
218
|
+
break;
|
219
|
+
|
220
|
+
default:
|
221
|
+
assert(0);
|
222
|
+
break;
|
223
|
+
}
|
224
|
+
}
|
225
|
+
}
|