summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/fiber.md7
-rw-r--r--ext/socket/depend435
-rw-r--r--ext/socket/raddrinfo.c125
-rw-r--r--ext/socket/rubysocket.h2
-rw-r--r--ext/socket/socket.c32
-rw-r--r--include/ruby/fiber/scheduler.h2
-rw-r--r--scheduler.c14
-rw-r--r--test/fiber/scheduler.rb6
-rw-r--r--test/fiber/test_address_resolve.rb281
9 files changed, 626 insertions, 278 deletions
diff --git a/doc/fiber.md b/doc/fiber.md
index 840bebd188..9baab4e4d1 100644
--- a/doc/fiber.md
+++ b/doc/fiber.md
@@ -90,6 +90,13 @@ class Scheduler
def timeout_after(duration, klass, *arguments, &block)
end
+ # Resolve hostname to an array of IP addresses.
+ # This hook is optional.
+ # @parameter hostname [String] Example: "www.ruby-lang.org".
+ # @returns [Array] An array of IPv4 and/or IPv6 address strings that the hostname resolves to.
+ def address_resolve(hostname)
+ end
+
# Block the calling fiber.
# @parameter blocker [Object] What we are waiting on, informational only.
# @parameter timeout [Numeric | Nil] The amount of time to wait for in seconds.
diff --git a/ext/socket/depend b/ext/socket/depend
index 4997df1117..7538345d6b 100644
--- a/ext/socket/depend
+++ b/ext/socket/depend
@@ -13,6 +13,21 @@ constdefs.c: constdefs.h
ancdata.o: $(RUBY_EXTCONF_H)
ancdata.o: $(arch_hdrdir)/ruby/config.h
ancdata.o: $(hdrdir)/ruby.h
+ancdata.o: $(hdrdir)/ruby/assert.h
+ancdata.o: $(hdrdir)/ruby/backward.h
+ancdata.o: $(hdrdir)/ruby/backward/2/assume.h
+ancdata.o: $(hdrdir)/ruby/backward/2/attributes.h
+ancdata.o: $(hdrdir)/ruby/backward/2/bool.h
+ancdata.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+ancdata.o: $(hdrdir)/ruby/backward/2/inttypes.h
+ancdata.o: $(hdrdir)/ruby/backward/2/limits.h
+ancdata.o: $(hdrdir)/ruby/backward/2/long_long.h
+ancdata.o: $(hdrdir)/ruby/backward/2/stdalign.h
+ancdata.o: $(hdrdir)/ruby/backward/2/stdarg.h
+ancdata.o: $(hdrdir)/ruby/defines.h
+ancdata.o: $(hdrdir)/ruby/encoding.h
+ancdata.o: $(hdrdir)/ruby/fiber/scheduler.h
+ancdata.o: $(hdrdir)/ruby/intern.h
ancdata.o: $(hdrdir)/ruby/internal/anyargs.h
ancdata.o: $(hdrdir)/ruby/internal/arithmetic.h
ancdata.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -152,20 +167,6 @@ ancdata.o: $(hdrdir)/ruby/internal/value_type.h
ancdata.o: $(hdrdir)/ruby/internal/variable.h
ancdata.o: $(hdrdir)/ruby/internal/warning_push.h
ancdata.o: $(hdrdir)/ruby/internal/xmalloc.h
-ancdata.o: $(hdrdir)/ruby/assert.h
-ancdata.o: $(hdrdir)/ruby/backward.h
-ancdata.o: $(hdrdir)/ruby/backward/2/assume.h
-ancdata.o: $(hdrdir)/ruby/backward/2/attributes.h
-ancdata.o: $(hdrdir)/ruby/backward/2/bool.h
-ancdata.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-ancdata.o: $(hdrdir)/ruby/backward/2/inttypes.h
-ancdata.o: $(hdrdir)/ruby/backward/2/limits.h
-ancdata.o: $(hdrdir)/ruby/backward/2/long_long.h
-ancdata.o: $(hdrdir)/ruby/backward/2/stdalign.h
-ancdata.o: $(hdrdir)/ruby/backward/2/stdarg.h
-ancdata.o: $(hdrdir)/ruby/defines.h
-ancdata.o: $(hdrdir)/ruby/encoding.h
-ancdata.o: $(hdrdir)/ruby/intern.h
ancdata.o: $(hdrdir)/ruby/io.h
ancdata.o: $(hdrdir)/ruby/missing.h
ancdata.o: $(hdrdir)/ruby/onigmo.h
@@ -194,6 +195,21 @@ ancdata.o: sockport.h
basicsocket.o: $(RUBY_EXTCONF_H)
basicsocket.o: $(arch_hdrdir)/ruby/config.h
basicsocket.o: $(hdrdir)/ruby.h
+basicsocket.o: $(hdrdir)/ruby/assert.h
+basicsocket.o: $(hdrdir)/ruby/backward.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/assume.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/bool.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/limits.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
+basicsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
+basicsocket.o: $(hdrdir)/ruby/defines.h
+basicsocket.o: $(hdrdir)/ruby/encoding.h
+basicsocket.o: $(hdrdir)/ruby/fiber/scheduler.h
+basicsocket.o: $(hdrdir)/ruby/intern.h
basicsocket.o: $(hdrdir)/ruby/internal/anyargs.h
basicsocket.o: $(hdrdir)/ruby/internal/arithmetic.h
basicsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -333,20 +349,6 @@ basicsocket.o: $(hdrdir)/ruby/internal/value_type.h
basicsocket.o: $(hdrdir)/ruby/internal/variable.h
basicsocket.o: $(hdrdir)/ruby/internal/warning_push.h
basicsocket.o: $(hdrdir)/ruby/internal/xmalloc.h
-basicsocket.o: $(hdrdir)/ruby/assert.h
-basicsocket.o: $(hdrdir)/ruby/backward.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/assume.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/bool.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/limits.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
-basicsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
-basicsocket.o: $(hdrdir)/ruby/defines.h
-basicsocket.o: $(hdrdir)/ruby/encoding.h
-basicsocket.o: $(hdrdir)/ruby/intern.h
basicsocket.o: $(hdrdir)/ruby/io.h
basicsocket.o: $(hdrdir)/ruby/missing.h
basicsocket.o: $(hdrdir)/ruby/onigmo.h
@@ -375,6 +377,21 @@ basicsocket.o: sockport.h
constants.o: $(RUBY_EXTCONF_H)
constants.o: $(arch_hdrdir)/ruby/config.h
constants.o: $(hdrdir)/ruby.h
+constants.o: $(hdrdir)/ruby/assert.h
+constants.o: $(hdrdir)/ruby/backward.h
+constants.o: $(hdrdir)/ruby/backward/2/assume.h
+constants.o: $(hdrdir)/ruby/backward/2/attributes.h
+constants.o: $(hdrdir)/ruby/backward/2/bool.h
+constants.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+constants.o: $(hdrdir)/ruby/backward/2/inttypes.h
+constants.o: $(hdrdir)/ruby/backward/2/limits.h
+constants.o: $(hdrdir)/ruby/backward/2/long_long.h
+constants.o: $(hdrdir)/ruby/backward/2/stdalign.h
+constants.o: $(hdrdir)/ruby/backward/2/stdarg.h
+constants.o: $(hdrdir)/ruby/defines.h
+constants.o: $(hdrdir)/ruby/encoding.h
+constants.o: $(hdrdir)/ruby/fiber/scheduler.h
+constants.o: $(hdrdir)/ruby/intern.h
constants.o: $(hdrdir)/ruby/internal/anyargs.h
constants.o: $(hdrdir)/ruby/internal/arithmetic.h
constants.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -514,20 +531,6 @@ constants.o: $(hdrdir)/ruby/internal/value_type.h
constants.o: $(hdrdir)/ruby/internal/variable.h
constants.o: $(hdrdir)/ruby/internal/warning_push.h
constants.o: $(hdrdir)/ruby/internal/xmalloc.h
-constants.o: $(hdrdir)/ruby/assert.h
-constants.o: $(hdrdir)/ruby/backward.h
-constants.o: $(hdrdir)/ruby/backward/2/assume.h
-constants.o: $(hdrdir)/ruby/backward/2/attributes.h
-constants.o: $(hdrdir)/ruby/backward/2/bool.h
-constants.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-constants.o: $(hdrdir)/ruby/backward/2/inttypes.h
-constants.o: $(hdrdir)/ruby/backward/2/limits.h
-constants.o: $(hdrdir)/ruby/backward/2/long_long.h
-constants.o: $(hdrdir)/ruby/backward/2/stdalign.h
-constants.o: $(hdrdir)/ruby/backward/2/stdarg.h
-constants.o: $(hdrdir)/ruby/defines.h
-constants.o: $(hdrdir)/ruby/encoding.h
-constants.o: $(hdrdir)/ruby/intern.h
constants.o: $(hdrdir)/ruby/io.h
constants.o: $(hdrdir)/ruby/missing.h
constants.o: $(hdrdir)/ruby/onigmo.h
@@ -557,6 +560,21 @@ constants.o: sockport.h
ifaddr.o: $(RUBY_EXTCONF_H)
ifaddr.o: $(arch_hdrdir)/ruby/config.h
ifaddr.o: $(hdrdir)/ruby.h
+ifaddr.o: $(hdrdir)/ruby/assert.h
+ifaddr.o: $(hdrdir)/ruby/backward.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/assume.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/attributes.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/bool.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/inttypes.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/limits.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/long_long.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/stdalign.h
+ifaddr.o: $(hdrdir)/ruby/backward/2/stdarg.h
+ifaddr.o: $(hdrdir)/ruby/defines.h
+ifaddr.o: $(hdrdir)/ruby/encoding.h
+ifaddr.o: $(hdrdir)/ruby/fiber/scheduler.h
+ifaddr.o: $(hdrdir)/ruby/intern.h
ifaddr.o: $(hdrdir)/ruby/internal/anyargs.h
ifaddr.o: $(hdrdir)/ruby/internal/arithmetic.h
ifaddr.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -696,20 +714,6 @@ ifaddr.o: $(hdrdir)/ruby/internal/value_type.h
ifaddr.o: $(hdrdir)/ruby/internal/variable.h
ifaddr.o: $(hdrdir)/ruby/internal/warning_push.h
ifaddr.o: $(hdrdir)/ruby/internal/xmalloc.h
-ifaddr.o: $(hdrdir)/ruby/assert.h
-ifaddr.o: $(hdrdir)/ruby/backward.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/assume.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/attributes.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/bool.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/inttypes.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/limits.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/long_long.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/stdalign.h
-ifaddr.o: $(hdrdir)/ruby/backward/2/stdarg.h
-ifaddr.o: $(hdrdir)/ruby/defines.h
-ifaddr.o: $(hdrdir)/ruby/encoding.h
-ifaddr.o: $(hdrdir)/ruby/intern.h
ifaddr.o: $(hdrdir)/ruby/io.h
ifaddr.o: $(hdrdir)/ruby/missing.h
ifaddr.o: $(hdrdir)/ruby/onigmo.h
@@ -738,6 +742,21 @@ ifaddr.o: sockport.h
init.o: $(RUBY_EXTCONF_H)
init.o: $(arch_hdrdir)/ruby/config.h
init.o: $(hdrdir)/ruby.h
+init.o: $(hdrdir)/ruby/assert.h
+init.o: $(hdrdir)/ruby/backward.h
+init.o: $(hdrdir)/ruby/backward/2/assume.h
+init.o: $(hdrdir)/ruby/backward/2/attributes.h
+init.o: $(hdrdir)/ruby/backward/2/bool.h
+init.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+init.o: $(hdrdir)/ruby/backward/2/inttypes.h
+init.o: $(hdrdir)/ruby/backward/2/limits.h
+init.o: $(hdrdir)/ruby/backward/2/long_long.h
+init.o: $(hdrdir)/ruby/backward/2/stdalign.h
+init.o: $(hdrdir)/ruby/backward/2/stdarg.h
+init.o: $(hdrdir)/ruby/defines.h
+init.o: $(hdrdir)/ruby/encoding.h
+init.o: $(hdrdir)/ruby/fiber/scheduler.h
+init.o: $(hdrdir)/ruby/intern.h
init.o: $(hdrdir)/ruby/internal/anyargs.h
init.o: $(hdrdir)/ruby/internal/arithmetic.h
init.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -877,20 +896,6 @@ init.o: $(hdrdir)/ruby/internal/value_type.h
init.o: $(hdrdir)/ruby/internal/variable.h
init.o: $(hdrdir)/ruby/internal/warning_push.h
init.o: $(hdrdir)/ruby/internal/xmalloc.h
-init.o: $(hdrdir)/ruby/assert.h
-init.o: $(hdrdir)/ruby/backward.h
-init.o: $(hdrdir)/ruby/backward/2/assume.h
-init.o: $(hdrdir)/ruby/backward/2/attributes.h
-init.o: $(hdrdir)/ruby/backward/2/bool.h
-init.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-init.o: $(hdrdir)/ruby/backward/2/inttypes.h
-init.o: $(hdrdir)/ruby/backward/2/limits.h
-init.o: $(hdrdir)/ruby/backward/2/long_long.h
-init.o: $(hdrdir)/ruby/backward/2/stdalign.h
-init.o: $(hdrdir)/ruby/backward/2/stdarg.h
-init.o: $(hdrdir)/ruby/defines.h
-init.o: $(hdrdir)/ruby/encoding.h
-init.o: $(hdrdir)/ruby/intern.h
init.o: $(hdrdir)/ruby/io.h
init.o: $(hdrdir)/ruby/missing.h
init.o: $(hdrdir)/ruby/onigmo.h
@@ -919,6 +924,21 @@ init.o: sockport.h
ipsocket.o: $(RUBY_EXTCONF_H)
ipsocket.o: $(arch_hdrdir)/ruby/config.h
ipsocket.o: $(hdrdir)/ruby.h
+ipsocket.o: $(hdrdir)/ruby/assert.h
+ipsocket.o: $(hdrdir)/ruby/backward.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/assume.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/bool.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/limits.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
+ipsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
+ipsocket.o: $(hdrdir)/ruby/defines.h
+ipsocket.o: $(hdrdir)/ruby/encoding.h
+ipsocket.o: $(hdrdir)/ruby/fiber/scheduler.h
+ipsocket.o: $(hdrdir)/ruby/intern.h
ipsocket.o: $(hdrdir)/ruby/internal/anyargs.h
ipsocket.o: $(hdrdir)/ruby/internal/arithmetic.h
ipsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1058,20 +1078,6 @@ ipsocket.o: $(hdrdir)/ruby/internal/value_type.h
ipsocket.o: $(hdrdir)/ruby/internal/variable.h
ipsocket.o: $(hdrdir)/ruby/internal/warning_push.h
ipsocket.o: $(hdrdir)/ruby/internal/xmalloc.h
-ipsocket.o: $(hdrdir)/ruby/assert.h
-ipsocket.o: $(hdrdir)/ruby/backward.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/assume.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/bool.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/limits.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
-ipsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
-ipsocket.o: $(hdrdir)/ruby/defines.h
-ipsocket.o: $(hdrdir)/ruby/encoding.h
-ipsocket.o: $(hdrdir)/ruby/intern.h
ipsocket.o: $(hdrdir)/ruby/io.h
ipsocket.o: $(hdrdir)/ruby/missing.h
ipsocket.o: $(hdrdir)/ruby/onigmo.h
@@ -1100,6 +1106,21 @@ ipsocket.o: sockport.h
option.o: $(RUBY_EXTCONF_H)
option.o: $(arch_hdrdir)/ruby/config.h
option.o: $(hdrdir)/ruby.h
+option.o: $(hdrdir)/ruby/assert.h
+option.o: $(hdrdir)/ruby/backward.h
+option.o: $(hdrdir)/ruby/backward/2/assume.h
+option.o: $(hdrdir)/ruby/backward/2/attributes.h
+option.o: $(hdrdir)/ruby/backward/2/bool.h
+option.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+option.o: $(hdrdir)/ruby/backward/2/inttypes.h
+option.o: $(hdrdir)/ruby/backward/2/limits.h
+option.o: $(hdrdir)/ruby/backward/2/long_long.h
+option.o: $(hdrdir)/ruby/backward/2/stdalign.h
+option.o: $(hdrdir)/ruby/backward/2/stdarg.h
+option.o: $(hdrdir)/ruby/defines.h
+option.o: $(hdrdir)/ruby/encoding.h
+option.o: $(hdrdir)/ruby/fiber/scheduler.h
+option.o: $(hdrdir)/ruby/intern.h
option.o: $(hdrdir)/ruby/internal/anyargs.h
option.o: $(hdrdir)/ruby/internal/arithmetic.h
option.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1239,20 +1260,6 @@ option.o: $(hdrdir)/ruby/internal/value_type.h
option.o: $(hdrdir)/ruby/internal/variable.h
option.o: $(hdrdir)/ruby/internal/warning_push.h
option.o: $(hdrdir)/ruby/internal/xmalloc.h
-option.o: $(hdrdir)/ruby/assert.h
-option.o: $(hdrdir)/ruby/backward.h
-option.o: $(hdrdir)/ruby/backward/2/assume.h
-option.o: $(hdrdir)/ruby/backward/2/attributes.h
-option.o: $(hdrdir)/ruby/backward/2/bool.h
-option.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-option.o: $(hdrdir)/ruby/backward/2/inttypes.h
-option.o: $(hdrdir)/ruby/backward/2/limits.h
-option.o: $(hdrdir)/ruby/backward/2/long_long.h
-option.o: $(hdrdir)/ruby/backward/2/stdalign.h
-option.o: $(hdrdir)/ruby/backward/2/stdarg.h
-option.o: $(hdrdir)/ruby/defines.h
-option.o: $(hdrdir)/ruby/encoding.h
-option.o: $(hdrdir)/ruby/intern.h
option.o: $(hdrdir)/ruby/io.h
option.o: $(hdrdir)/ruby/missing.h
option.o: $(hdrdir)/ruby/onigmo.h
@@ -1281,6 +1288,21 @@ option.o: sockport.h
raddrinfo.o: $(RUBY_EXTCONF_H)
raddrinfo.o: $(arch_hdrdir)/ruby/config.h
raddrinfo.o: $(hdrdir)/ruby.h
+raddrinfo.o: $(hdrdir)/ruby/assert.h
+raddrinfo.o: $(hdrdir)/ruby/backward.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/assume.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/attributes.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/bool.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/inttypes.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/limits.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/long_long.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/stdalign.h
+raddrinfo.o: $(hdrdir)/ruby/backward/2/stdarg.h
+raddrinfo.o: $(hdrdir)/ruby/defines.h
+raddrinfo.o: $(hdrdir)/ruby/encoding.h
+raddrinfo.o: $(hdrdir)/ruby/fiber/scheduler.h
+raddrinfo.o: $(hdrdir)/ruby/intern.h
raddrinfo.o: $(hdrdir)/ruby/internal/anyargs.h
raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic.h
raddrinfo.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1420,20 +1442,6 @@ raddrinfo.o: $(hdrdir)/ruby/internal/value_type.h
raddrinfo.o: $(hdrdir)/ruby/internal/variable.h
raddrinfo.o: $(hdrdir)/ruby/internal/warning_push.h
raddrinfo.o: $(hdrdir)/ruby/internal/xmalloc.h
-raddrinfo.o: $(hdrdir)/ruby/assert.h
-raddrinfo.o: $(hdrdir)/ruby/backward.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/assume.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/attributes.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/bool.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/inttypes.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/limits.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/long_long.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/stdalign.h
-raddrinfo.o: $(hdrdir)/ruby/backward/2/stdarg.h
-raddrinfo.o: $(hdrdir)/ruby/defines.h
-raddrinfo.o: $(hdrdir)/ruby/encoding.h
-raddrinfo.o: $(hdrdir)/ruby/intern.h
raddrinfo.o: $(hdrdir)/ruby/io.h
raddrinfo.o: $(hdrdir)/ruby/missing.h
raddrinfo.o: $(hdrdir)/ruby/onigmo.h
@@ -1462,6 +1470,21 @@ raddrinfo.o: sockport.h
socket.o: $(RUBY_EXTCONF_H)
socket.o: $(arch_hdrdir)/ruby/config.h
socket.o: $(hdrdir)/ruby.h
+socket.o: $(hdrdir)/ruby/assert.h
+socket.o: $(hdrdir)/ruby/backward.h
+socket.o: $(hdrdir)/ruby/backward/2/assume.h
+socket.o: $(hdrdir)/ruby/backward/2/attributes.h
+socket.o: $(hdrdir)/ruby/backward/2/bool.h
+socket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+socket.o: $(hdrdir)/ruby/backward/2/inttypes.h
+socket.o: $(hdrdir)/ruby/backward/2/limits.h
+socket.o: $(hdrdir)/ruby/backward/2/long_long.h
+socket.o: $(hdrdir)/ruby/backward/2/stdalign.h
+socket.o: $(hdrdir)/ruby/backward/2/stdarg.h
+socket.o: $(hdrdir)/ruby/defines.h
+socket.o: $(hdrdir)/ruby/encoding.h
+socket.o: $(hdrdir)/ruby/fiber/scheduler.h
+socket.o: $(hdrdir)/ruby/intern.h
socket.o: $(hdrdir)/ruby/internal/anyargs.h
socket.o: $(hdrdir)/ruby/internal/arithmetic.h
socket.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1601,20 +1624,6 @@ socket.o: $(hdrdir)/ruby/internal/value_type.h
socket.o: $(hdrdir)/ruby/internal/variable.h
socket.o: $(hdrdir)/ruby/internal/warning_push.h
socket.o: $(hdrdir)/ruby/internal/xmalloc.h
-socket.o: $(hdrdir)/ruby/assert.h
-socket.o: $(hdrdir)/ruby/backward.h
-socket.o: $(hdrdir)/ruby/backward/2/assume.h
-socket.o: $(hdrdir)/ruby/backward/2/attributes.h
-socket.o: $(hdrdir)/ruby/backward/2/bool.h
-socket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-socket.o: $(hdrdir)/ruby/backward/2/inttypes.h
-socket.o: $(hdrdir)/ruby/backward/2/limits.h
-socket.o: $(hdrdir)/ruby/backward/2/long_long.h
-socket.o: $(hdrdir)/ruby/backward/2/stdalign.h
-socket.o: $(hdrdir)/ruby/backward/2/stdarg.h
-socket.o: $(hdrdir)/ruby/defines.h
-socket.o: $(hdrdir)/ruby/encoding.h
-socket.o: $(hdrdir)/ruby/intern.h
socket.o: $(hdrdir)/ruby/io.h
socket.o: $(hdrdir)/ruby/missing.h
socket.o: $(hdrdir)/ruby/onigmo.h
@@ -1643,6 +1652,21 @@ socket.o: sockport.h
sockssocket.o: $(RUBY_EXTCONF_H)
sockssocket.o: $(arch_hdrdir)/ruby/config.h
sockssocket.o: $(hdrdir)/ruby.h
+sockssocket.o: $(hdrdir)/ruby/assert.h
+sockssocket.o: $(hdrdir)/ruby/backward.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/assume.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/attributes.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/bool.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/limits.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/long_long.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
+sockssocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
+sockssocket.o: $(hdrdir)/ruby/defines.h
+sockssocket.o: $(hdrdir)/ruby/encoding.h
+sockssocket.o: $(hdrdir)/ruby/fiber/scheduler.h
+sockssocket.o: $(hdrdir)/ruby/intern.h
sockssocket.o: $(hdrdir)/ruby/internal/anyargs.h
sockssocket.o: $(hdrdir)/ruby/internal/arithmetic.h
sockssocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1782,20 +1806,6 @@ sockssocket.o: $(hdrdir)/ruby/internal/value_type.h
sockssocket.o: $(hdrdir)/ruby/internal/variable.h
sockssocket.o: $(hdrdir)/ruby/internal/warning_push.h
sockssocket.o: $(hdrdir)/ruby/internal/xmalloc.h
-sockssocket.o: $(hdrdir)/ruby/assert.h
-sockssocket.o: $(hdrdir)/ruby/backward.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/assume.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/attributes.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/bool.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/limits.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/long_long.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
-sockssocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
-sockssocket.o: $(hdrdir)/ruby/defines.h
-sockssocket.o: $(hdrdir)/ruby/encoding.h
-sockssocket.o: $(hdrdir)/ruby/intern.h
sockssocket.o: $(hdrdir)/ruby/io.h
sockssocket.o: $(hdrdir)/ruby/missing.h
sockssocket.o: $(hdrdir)/ruby/onigmo.h
@@ -1824,6 +1834,21 @@ sockssocket.o: sockssocket.c
tcpserver.o: $(RUBY_EXTCONF_H)
tcpserver.o: $(arch_hdrdir)/ruby/config.h
tcpserver.o: $(hdrdir)/ruby.h
+tcpserver.o: $(hdrdir)/ruby/assert.h
+tcpserver.o: $(hdrdir)/ruby/backward.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/assume.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/attributes.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/bool.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/inttypes.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/limits.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/long_long.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/stdalign.h
+tcpserver.o: $(hdrdir)/ruby/backward/2/stdarg.h
+tcpserver.o: $(hdrdir)/ruby/defines.h
+tcpserver.o: $(hdrdir)/ruby/encoding.h
+tcpserver.o: $(hdrdir)/ruby/fiber/scheduler.h
+tcpserver.o: $(hdrdir)/ruby/intern.h
tcpserver.o: $(hdrdir)/ruby/internal/anyargs.h
tcpserver.o: $(hdrdir)/ruby/internal/arithmetic.h
tcpserver.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1963,20 +1988,6 @@ tcpserver.o: $(hdrdir)/ruby/internal/value_type.h
tcpserver.o: $(hdrdir)/ruby/internal/variable.h
tcpserver.o: $(hdrdir)/ruby/internal/warning_push.h
tcpserver.o: $(hdrdir)/ruby/internal/xmalloc.h
-tcpserver.o: $(hdrdir)/ruby/assert.h
-tcpserver.o: $(hdrdir)/ruby/backward.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/assume.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/attributes.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/bool.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/inttypes.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/limits.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/long_long.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/stdalign.h
-tcpserver.o: $(hdrdir)/ruby/backward/2/stdarg.h
-tcpserver.o: $(hdrdir)/ruby/defines.h
-tcpserver.o: $(hdrdir)/ruby/encoding.h
-tcpserver.o: $(hdrdir)/ruby/intern.h
tcpserver.o: $(hdrdir)/ruby/io.h
tcpserver.o: $(hdrdir)/ruby/missing.h
tcpserver.o: $(hdrdir)/ruby/onigmo.h
@@ -2005,6 +2016,21 @@ tcpserver.o: tcpserver.c
tcpsocket.o: $(RUBY_EXTCONF_H)
tcpsocket.o: $(arch_hdrdir)/ruby/config.h
tcpsocket.o: $(hdrdir)/ruby.h
+tcpsocket.o: $(hdrdir)/ruby/assert.h
+tcpsocket.o: $(hdrdir)/ruby/backward.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/assume.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/bool.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/limits.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
+tcpsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
+tcpsocket.o: $(hdrdir)/ruby/defines.h
+tcpsocket.o: $(hdrdir)/ruby/encoding.h
+tcpsocket.o: $(hdrdir)/ruby/fiber/scheduler.h
+tcpsocket.o: $(hdrdir)/ruby/intern.h
tcpsocket.o: $(hdrdir)/ruby/internal/anyargs.h
tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic.h
tcpsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -2144,20 +2170,6 @@ tcpsocket.o: $(hdrdir)/ruby/internal/value_type.h
tcpsocket.o: $(hdrdir)/ruby/internal/variable.h
tcpsocket.o: $(hdrdir)/ruby/internal/warning_push.h
tcpsocket.o: $(hdrdir)/ruby/internal/xmalloc.h
-tcpsocket.o: $(hdrdir)/ruby/assert.h
-tcpsocket.o: $(hdrdir)/ruby/backward.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/assume.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/bool.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/limits.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
-tcpsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
-tcpsocket.o: $(hdrdir)/ruby/defines.h
-tcpsocket.o: $(hdrdir)/ruby/encoding.h
-tcpsocket.o: $(hdrdir)/ruby/intern.h
tcpsocket.o: $(hdrdir)/ruby/io.h
tcpsocket.o: $(hdrdir)/ruby/missing.h
tcpsocket.o: $(hdrdir)/ruby/onigmo.h
@@ -2186,6 +2198,21 @@ tcpsocket.o: tcpsocket.c
udpsocket.o: $(RUBY_EXTCONF_H)
udpsocket.o: $(arch_hdrdir)/ruby/config.h
udpsocket.o: $(hdrdir)/ruby.h
+udpsocket.o: $(hdrdir)/ruby/assert.h
+udpsocket.o: $(hdrdir)/ruby/backward.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/assume.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/bool.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/limits.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
+udpsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
+udpsocket.o: $(hdrdir)/ruby/defines.h
+udpsocket.o: $(hdrdir)/ruby/encoding.h
+udpsocket.o: $(hdrdir)/ruby/fiber/scheduler.h
+udpsocket.o: $(hdrdir)/ruby/intern.h
udpsocket.o: $(hdrdir)/ruby/internal/anyargs.h
udpsocket.o: $(hdrdir)/ruby/internal/arithmetic.h
udpsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -2325,20 +2352,6 @@ udpsocket.o: $(hdrdir)/ruby/internal/value_type.h
udpsocket.o: $(hdrdir)/ruby/internal/variable.h
udpsocket.o: $(hdrdir)/ruby/internal/warning_push.h
udpsocket.o: $(hdrdir)/ruby/internal/xmalloc.h
-udpsocket.o: $(hdrdir)/ruby/assert.h
-udpsocket.o: $(hdrdir)/ruby/backward.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/assume.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/bool.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/limits.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
-udpsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
-udpsocket.o: $(hdrdir)/ruby/defines.h
-udpsocket.o: $(hdrdir)/ruby/encoding.h
-udpsocket.o: $(hdrdir)/ruby/intern.h
udpsocket.o: $(hdrdir)/ruby/io.h
udpsocket.o: $(hdrdir)/ruby/missing.h
udpsocket.o: $(hdrdir)/ruby/onigmo.h
@@ -2367,6 +2380,21 @@ udpsocket.o: udpsocket.c
unixserver.o: $(RUBY_EXTCONF_H)
unixserver.o: $(arch_hdrdir)/ruby/config.h
unixserver.o: $(hdrdir)/ruby.h
+unixserver.o: $(hdrdir)/ruby/assert.h
+unixserver.o: $(hdrdir)/ruby/backward.h
+unixserver.o: $(hdrdir)/ruby/backward/2/assume.h
+unixserver.o: $(hdrdir)/ruby/backward/2/attributes.h
+unixserver.o: $(hdrdir)/ruby/backward/2/bool.h
+unixserver.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+unixserver.o: $(hdrdir)/ruby/backward/2/inttypes.h
+unixserver.o: $(hdrdir)/ruby/backward/2/limits.h
+unixserver.o: $(hdrdir)/ruby/backward/2/long_long.h
+unixserver.o: $(hdrdir)/ruby/backward/2/stdalign.h
+unixserver.o: $(hdrdir)/ruby/backward/2/stdarg.h
+unixserver.o: $(hdrdir)/ruby/defines.h
+unixserver.o: $(hdrdir)/ruby/encoding.h
+unixserver.o: $(hdrdir)/ruby/fiber/scheduler.h
+unixserver.o: $(hdrdir)/ruby/intern.h
unixserver.o: $(hdrdir)/ruby/internal/anyargs.h
unixserver.o: $(hdrdir)/ruby/internal/arithmetic.h
unixserver.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -2506,20 +2534,6 @@ unixserver.o: $(hdrdir)/ruby/internal/value_type.h
unixserver.o: $(hdrdir)/ruby/internal/variable.h
unixserver.o: $(hdrdir)/ruby/internal/warning_push.h
unixserver.o: $(hdrdir)/ruby/internal/xmalloc.h
-unixserver.o: $(hdrdir)/ruby/assert.h
-unixserver.o: $(hdrdir)/ruby/backward.h
-unixserver.o: $(hdrdir)/ruby/backward/2/assume.h
-unixserver.o: $(hdrdir)/ruby/backward/2/attributes.h
-unixserver.o: $(hdrdir)/ruby/backward/2/bool.h
-unixserver.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-unixserver.o: $(hdrdir)/ruby/backward/2/inttypes.h
-unixserver.o: $(hdrdir)/ruby/backward/2/limits.h
-unixserver.o: $(hdrdir)/ruby/backward/2/long_long.h
-unixserver.o: $(hdrdir)/ruby/backward/2/stdalign.h
-unixserver.o: $(hdrdir)/ruby/backward/2/stdarg.h
-unixserver.o: $(hdrdir)/ruby/defines.h
-unixserver.o: $(hdrdir)/ruby/encoding.h
-unixserver.o: $(hdrdir)/ruby/intern.h
unixserver.o: $(hdrdir)/ruby/io.h
unixserver.o: $(hdrdir)/ruby/missing.h
unixserver.o: $(hdrdir)/ruby/onigmo.h
@@ -2548,6 +2562,21 @@ unixserver.o: unixserver.c
unixsocket.o: $(RUBY_EXTCONF_H)
unixsocket.o: $(arch_hdrdir)/ruby/config.h
unixsocket.o: $(hdrdir)/ruby.h
+unixsocket.o: $(hdrdir)/ruby/assert.h
+unixsocket.o: $(hdrdir)/ruby/backward.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/assume.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/bool.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/limits.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
+unixsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
+unixsocket.o: $(hdrdir)/ruby/defines.h
+unixsocket.o: $(hdrdir)/ruby/encoding.h
+unixsocket.o: $(hdrdir)/ruby/fiber/scheduler.h
+unixsocket.o: $(hdrdir)/ruby/intern.h
unixsocket.o: $(hdrdir)/ruby/internal/anyargs.h
unixsocket.o: $(hdrdir)/ruby/internal/arithmetic.h
unixsocket.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -2687,20 +2716,6 @@ unixsocket.o: $(hdrdir)/ruby/internal/value_type.h
unixsocket.o: $(hdrdir)/ruby/internal/variable.h
unixsocket.o: $(hdrdir)/ruby/internal/warning_push.h
unixsocket.o: $(hdrdir)/ruby/internal/xmalloc.h
-unixsocket.o: $(hdrdir)/ruby/assert.h
-unixsocket.o: $(hdrdir)/ruby/backward.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/assume.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/attributes.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/bool.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/inttypes.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/limits.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/long_long.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/stdalign.h
-unixsocket.o: $(hdrdir)/ruby/backward/2/stdarg.h
-unixsocket.o: $(hdrdir)/ruby/defines.h
-unixsocket.o: $(hdrdir)/ruby/encoding.h
-unixsocket.o: $(hdrdir)/ruby/intern.h
unixsocket.o: $(hdrdir)/ruby/io.h
unixsocket.o: $(hdrdir)/ruby/missing.h
unixsocket.o: $(hdrdir)/ruby/onigmo.h
diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c
index d99edfe057..d94e96a2bc 100644
--- a/ext/socket/raddrinfo.c
+++ b/ext/socket/raddrinfo.c
@@ -284,40 +284,6 @@ numeric_getaddrinfo(const char *node, const char *service,
return EAI_FAIL;
}
-int
-rb_getaddrinfo(const char *node, const char *service,
- const struct addrinfo *hints,
- struct rb_addrinfo **res)
-{
- struct addrinfo *ai;
- int ret;
- int allocated_by_malloc = 0;
-
- ret = numeric_getaddrinfo(node, service, hints, &ai);
- if (ret == 0)
- allocated_by_malloc = 1;
- else {
-#ifdef GETADDRINFO_EMU
- ret = getaddrinfo(node, service, hints, &ai);
-#else
- struct getaddrinfo_arg arg;
- MEMZERO(&arg, struct getaddrinfo_arg, 1);
- arg.node = node;
- arg.service = service;
- arg.hints = hints;
- arg.res = &ai;
- ret = (int)(VALUE)rb_thread_call_without_gvl(nogvl_getaddrinfo, &arg, RUBY_UBF_IO, 0);
-#endif
- }
-
- if (ret == 0) {
- *res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo));
- (*res)->allocated_by_malloc = allocated_by_malloc;
- (*res)->ai = ai;
- }
- return ret;
-}
-
void
rb_freeaddrinfo(struct rb_addrinfo *ai)
{
@@ -498,12 +464,63 @@ port_str(VALUE port, char *pbuf, size_t pbuflen, int *flags_ptr)
}
}
+static int
+rb_scheduler_getaddrinfo(VALUE scheduler, VALUE host, const char *service,
+ const struct addrinfo *hints, struct rb_addrinfo **res)
+{
+ int error, res_allocated = 0, _additional_flags = 0;
+ long i, len;
+ struct addrinfo *ai, *ai_tail = NULL;
+ char *hostp;
+ char _hbuf[NI_MAXHOST];
+ VALUE ip_addresses_array, ip_address;
+
+ ip_addresses_array = rb_fiber_scheduler_address_resolve(scheduler, host);
+
+ if (ip_addresses_array == Qundef) {
+ // Returns EAI_FAIL if the scheduler hook is not implemented:
+ return EAI_FAIL;
+ } else if (ip_addresses_array == Qnil) {
+ len = 0;
+ } else {
+ len = RARRAY_LEN(ip_addresses_array);
+ }
+
+ for(i=0; i<len; i++) {
+ ip_address = rb_ary_entry(ip_addresses_array, i);
+ hostp = host_str(ip_address, _hbuf, sizeof(_hbuf), &_additional_flags);
+ error = numeric_getaddrinfo(hostp, service, hints, &ai);
+ if (error == 0) {
+ if (!res_allocated) {
+ res_allocated = 1;
+ *res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo));
+ (*res)->allocated_by_malloc = 1;
+ (*res)->ai = ai;
+ ai_tail = ai;
+ } else {
+ while (ai_tail->ai_next) {
+ ai_tail = ai_tail->ai_next;
+ }
+ ai_tail->ai_next = ai;
+ ai_tail = ai;
+ }
+ }
+ }
+
+ if (res_allocated) { // At least one valid result.
+ return 0;
+ } else {
+ return EAI_NONAME;
+ }
+}
+
struct rb_addrinfo*
rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack)
{
struct rb_addrinfo* res = NULL;
+ struct addrinfo *ai;
char *hostp, *portp;
- int error;
+ int error = 0;
char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
int additional_flags = 0;
@@ -515,7 +532,43 @@ rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_h
}
hints->ai_flags |= additional_flags;
- error = rb_getaddrinfo(hostp, portp, hints, &res);
+ error = numeric_getaddrinfo(hostp, portp, hints, &ai);
+ if (error == 0) {
+ res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo));
+ res->allocated_by_malloc = 1;
+ res->ai = ai;
+ } else {
+ VALUE scheduler = rb_fiber_scheduler_current();
+ int resolved = 0;
+
+ if (scheduler != Qnil && hostp && !(hints->ai_flags & AI_NUMERICHOST)) {
+ error = rb_scheduler_getaddrinfo(scheduler, host, portp, hints, &res);
+
+ if (error != EAI_FAIL) {
+ resolved = 1;
+ }
+ }
+
+ if (!resolved) {
+#ifdef GETADDRINFO_EMU
+ error = getaddrinfo(hostp, portp, hints, &ai);
+#else
+ struct getaddrinfo_arg arg;
+ MEMZERO(&arg, struct getaddrinfo_arg, 1);
+ arg.node = hostp;
+ arg.service = portp;
+ arg.hints = hints;
+ arg.res = &ai;
+ error = (int)(VALUE)rb_thread_call_without_gvl(nogvl_getaddrinfo, &arg, RUBY_UBF_IO, 0);
+#endif
+ if (error == 0) {
+ res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo));
+ res->allocated_by_malloc = 0;
+ res->ai = ai;
+ }
+ }
+ }
+
if (error) {
if (hostp && hostp[strlen(hostp)-1] == '\n') {
rb_raise(rb_eSocket, "newline at the end of hostname");
diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h
index f0e4f3a4a0..2a4c6e136a 100644
--- a/ext/socket/rubysocket.h
+++ b/ext/socket/rubysocket.h
@@ -139,6 +139,7 @@
#include "ruby/thread.h"
#include "ruby/util.h"
#include "sockport.h"
+#include "ruby/fiber/scheduler.h"
#ifndef HAVE_TYPE_SOCKLEN_T
typedef int socklen_t;
@@ -313,7 +314,6 @@ struct rb_addrinfo {
struct addrinfo *ai;
int allocated_by_malloc;
};
-int rb_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct rb_addrinfo **res);
void rb_freeaddrinfo(struct rb_addrinfo *ai);
VALUE rsock_freeaddrinfo(VALUE arg);
int rb_getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index bebddd9e2b..09e8f2f00b 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -1279,34 +1279,10 @@ sock_s_getnameinfo(int argc, VALUE *argv, VALUE _)
rb_raise(rb_eArgError, "array size should be 3 or 4, %ld given",
RARRAY_LEN(sa));
}
- /* host */
- if (NIL_P(host)) {
- hptr = NULL;
- }
- else {
- strncpy(hbuf, StringValueCStr(host), sizeof(hbuf));
- hbuf[sizeof(hbuf) - 1] = '\0';
- hptr = hbuf;
- }
- /* port */
- if (NIL_P(port)) {
- strcpy(pbuf, "0");
- pptr = NULL;
- }
- else if (FIXNUM_P(port)) {
- snprintf(pbuf, sizeof(pbuf), "%ld", NUM2LONG(port));
- pptr = pbuf;
- }
- else {
- strncpy(pbuf, StringValueCStr(port), sizeof(pbuf));
- pbuf[sizeof(pbuf) - 1] = '\0';
- pptr = pbuf;
- }
hints.ai_socktype = (fl & NI_DGRAM) ? SOCK_DGRAM : SOCK_STREAM;
/* af */
hints.ai_family = NIL_P(af) ? PF_UNSPEC : rsock_family_arg(af);
- error = rb_getaddrinfo(hptr, pptr, &hints, &res);
- if (error) goto error_exit_addr;
+ res = rsock_getaddrinfo(host, port, &hints, 0);
sap = res->ai->ai_addr;
salen = res->ai->ai_addrlen;
}
@@ -1336,12 +1312,6 @@ sock_s_getnameinfo(int argc, VALUE *argv, VALUE _)
}
return rb_assoc_new(rb_str_new2(hbuf), rb_str_new2(pbuf));
- error_exit_addr:
- saved_errno = errno;
- if (res) rb_freeaddrinfo(res);
- errno = saved_errno;
- rsock_raise_socket_error("getaddrinfo", error);
-
error_exit_name:
saved_errno = errno;
if (res) rb_freeaddrinfo(res);
diff --git a/include/ruby/fiber/scheduler.h b/include/ruby/fiber/scheduler.h
index 5d32559a2e..246e690587 100644
--- a/include/ruby/fiber/scheduler.h
+++ b/include/ruby/fiber/scheduler.h
@@ -44,6 +44,8 @@ VALUE rb_fiber_scheduler_io_wait_writable(VALUE scheduler, VALUE io);
VALUE rb_fiber_scheduler_io_read(VALUE scheduler, VALUE io, VALUE buffer, size_t offset, size_t length);
VALUE rb_fiber_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t offset, size_t length);
+VALUE rb_fiber_scheduler_address_resolve(VALUE scheduler, VALUE hostname);
+
RBIMPL_SYMBOL_EXPORT_END()
#endif /* RUBY_FIBER_SCHEDULER_H */
diff --git a/scheduler.c b/scheduler.c
index 38846b6611..5937d61007 100644
--- a/scheduler.c
+++ b/scheduler.c
@@ -25,6 +25,8 @@ static ID id_io_read;
static ID id_io_write;
static ID id_io_wait;
+static ID id_address_resolve;
+
void
Init_Fiber_Scheduler(void)
{
@@ -40,6 +42,8 @@ Init_Fiber_Scheduler(void)
id_io_read = rb_intern_const("io_read");
id_io_write = rb_intern_const("io_write");
id_io_wait = rb_intern_const("io_wait");
+
+ id_address_resolve = rb_intern_const("address_resolve");
}
VALUE
@@ -200,3 +204,13 @@ rb_fiber_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t offs
// We should ensure string has capacity to receive data, and then resize it afterwards.
return rb_check_funcall(scheduler, id_io_write, 4, arguments);
}
+
+VALUE
+rb_fiber_scheduler_address_resolve(VALUE scheduler, VALUE hostname)
+{
+ VALUE arguments[] = {
+ hostname
+ };
+
+ return rb_check_funcall(scheduler, id_address_resolve, 1, arguments);
+}
diff --git a/test/fiber/scheduler.rb b/test/fiber/scheduler.rb
index 0461cfbe3f..69299b04e6 100644
--- a/test/fiber/scheduler.rb
+++ b/test/fiber/scheduler.rb
@@ -223,4 +223,10 @@ class Scheduler
return fiber
end
+
+ def address_resolve(hostname)
+ Thread.new do
+ Addrinfo.getaddrinfo(hostname, nil).map(&:ip_address).uniq
+ end.value
+ end
end
diff --git a/test/fiber/test_address_resolve.rb b/test/fiber/test_address_resolve.rb
new file mode 100644
index 0000000000..f2ad680b0a
--- /dev/null
+++ b/test/fiber/test_address_resolve.rb
@@ -0,0 +1,281 @@
+# frozen_string_literal: true
+require 'test/unit'
+require_relative 'scheduler'
+
+class TestAddressResolve < Test::Unit::TestCase
+ class NullScheduler < Scheduler
+ def address_resolve(*)
+ end
+ end
+
+ class StubScheduler < Scheduler
+ def address_resolve(hostname)
+ ["1.2.3.4", "1234::1"]
+ end
+ end
+
+ def test_addrinfo_getaddrinfo_ipv4_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ result = Addrinfo.getaddrinfo("example.com", 80, :AF_INET, :STREAM)
+ assert_equal(1, result.count)
+
+ ai = result.first
+ assert_equal("1.2.3.4", ai.ip_address)
+ assert_equal(80, ai.ip_port)
+ assert_equal(Socket::AF_INET, ai.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai.socktype)
+ end
+ end.join
+ end
+
+ def test_addrinfo_getaddrinfo_ipv6_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ result = Addrinfo.getaddrinfo("example.com", 80, :AF_INET6, :STREAM)
+ assert_equal(1, result.count)
+
+ ai = result.first
+ assert_equal("1234::1", ai.ip_address)
+ assert_equal(80, ai.ip_port)
+ assert_equal(Socket::AF_INET6, ai.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai.socktype)
+ end
+ end.join
+ end
+
+ def test_addrinfo_getaddrinfo_pf_unspec_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ results = Addrinfo.getaddrinfo("example.com", 80, :PF_UNSPEC, :STREAM)
+ assert_equal(2, results.count)
+
+ ai_ipv4 = results.first
+ assert_equal("1.2.3.4", ai_ipv4.ip_address)
+ assert_equal(80, ai_ipv4.ip_port)
+ assert_equal(Socket::AF_INET, ai_ipv4.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai_ipv4.socktype)
+
+ ai_ipv6 = results.last
+ assert_equal("1234::1", ai_ipv6.ip_address)
+ assert_equal(80, ai_ipv6.ip_port)
+ assert_equal(Socket::AF_INET6, ai_ipv6.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai_ipv6.socktype)
+ end
+ end.join
+ end
+
+ def test_addrinfo_getaddrinfo_full_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ results = Addrinfo.getaddrinfo("example.com", 80)
+ assert_equal(6, results.count)
+
+ ai_ipv4_tcp = results[0]
+ assert_equal("1.2.3.4", ai_ipv4_tcp.ip_address)
+ assert_equal(80, ai_ipv4_tcp.ip_port)
+ assert_equal(Socket::AF_INET, ai_ipv4_tcp.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai_ipv4_tcp.socktype)
+
+ ai_ipv4_udp = results[1]
+ assert_equal("1.2.3.4", ai_ipv4_udp.ip_address)
+ assert_equal(80, ai_ipv4_udp.ip_port)
+ assert_equal(Socket::AF_INET, ai_ipv4_udp.afamily)
+ assert_equal(Socket::SOCK_DGRAM, ai_ipv4_udp.socktype)
+
+ ai_ipv4_sock_raw = results[2]
+ assert_equal("1.2.3.4", ai_ipv4_sock_raw.ip_address)
+ assert_equal(80, ai_ipv4_sock_raw.ip_port)
+ assert_equal(Socket::AF_INET, ai_ipv4_sock_raw.afamily)
+ assert_equal(Socket::SOCK_RAW, ai_ipv4_sock_raw.socktype)
+
+ ai_ipv6_tcp = results[3]
+ assert_equal("1234::1", ai_ipv6_tcp.ip_address)
+ assert_equal(80, ai_ipv6_tcp.ip_port)
+ assert_equal(Socket::AF_INET6, ai_ipv6_tcp.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai_ipv6_tcp.socktype)
+
+ ai_ipv6_udp = results[4]
+ assert_equal("1234::1", ai_ipv6_udp.ip_address)
+ assert_equal(80, ai_ipv6_udp.ip_port)
+ assert_equal(Socket::AF_INET6, ai_ipv6_udp.afamily)
+ assert_equal(Socket::SOCK_DGRAM, ai_ipv6_udp.socktype)
+
+ ai_ipv6_sock_raw = results[5]
+ assert_equal("1234::1", ai_ipv6_sock_raw.ip_address)
+ assert_equal(80, ai_ipv6_sock_raw.ip_port)
+ assert_equal(Socket::AF_INET6, ai_ipv6_sock_raw.afamily)
+ assert_equal(Socket::SOCK_RAW, ai_ipv6_sock_raw.socktype)
+ end
+ end.join
+ end
+
+ def test_addrinfo_getaddrinfo_numeric_non_blocking
+ Thread.new do
+ scheduler = NullScheduler.new # scheduler hook not invoked
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ result = Addrinfo.getaddrinfo("1.2.3.4", 80, :AF_INET, :STREAM)
+ assert_equal(1, result.count)
+
+ ai = result.first
+ assert_equal("1.2.3.4", ai.ip_address)
+ assert_equal(80, ai.ip_port)
+ assert_equal(Socket::AF_INET, ai.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai.socktype)
+ end
+ end.join
+ end
+
+ def test_addrinfo_getaddrinfo_any_non_blocking
+ Thread.new do
+ scheduler = NullScheduler.new # scheduler hook not invoked
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ result = Addrinfo.getaddrinfo("<any>", 80, :AF_INET, :STREAM)
+ assert_equal(1, result.count)
+
+ ai = result.first
+ assert_equal("0.0.0.0", ai.ip_address)
+ assert_equal(80, ai.ip_port)
+ assert_equal(Socket::AF_INET, ai.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai.socktype)
+ end
+ end.join
+ end
+
+ def test_addrinfo_getaddrinfo_localhost
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ results = Addrinfo.getaddrinfo("localhost", 80, :AF_INET, :STREAM)
+ assert_equal(1, results.count)
+
+ ai = results.first
+ assert_equal("1.2.3.4", ai.ip_address)
+ end
+ end.join
+ end
+
+ def test_addrinfo_getaddrinfo_non_existing_domain_blocking
+ Thread.new do
+ scheduler = NullScheduler.new # invoked, returns nil
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ assert_raise(SocketError) {
+ Addrinfo.getaddrinfo("non-existing-domain.abc", nil)
+ }
+ end
+ end.join
+ end
+
+ def test_addrinfo_getaddrinfo_no_host_non_blocking
+ Thread.new do
+ scheduler = NullScheduler.new # scheduler hook not invoked
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ result = Addrinfo.getaddrinfo(nil, 80, :AF_INET, :STREAM)
+ assert_equal(1, result.count)
+
+ ai = result.first
+ assert_equal("127.0.0.1", ai.ip_address)
+ assert_equal(80, ai.ip_port)
+ assert_equal(Socket::AF_INET, ai.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai.socktype)
+ end
+ end.join
+ end
+
+ def test_addrinfo_ip_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ ai = Addrinfo.ip("example.com")
+
+ assert_equal("1.2.3.4", ai.ip_address)
+ end
+ end.join
+ end
+
+ def test_addrinfo_tcp_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ ai = Addrinfo.tcp("example.com", 80)
+
+ assert_equal("1.2.3.4", ai.ip_address)
+ assert_equal(80, ai.ip_port)
+ assert_equal(Socket::AF_INET, ai.afamily)
+ assert_equal(Socket::SOCK_STREAM, ai.socktype)
+ end
+ end.join
+ end
+
+ def test_addrinfo_udp_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ ai = Addrinfo.udp("example.com", 80)
+
+ assert_equal("1.2.3.4", ai.ip_address)
+ assert_equal(80, ai.ip_port)
+ assert_equal(Socket::AF_INET, ai.afamily)
+ assert_equal(Socket::SOCK_DGRAM, ai.socktype)
+ end
+ end.join
+ end
+
+ def test_ip_socket_getaddress_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ ip = IPSocket.getaddress("example.com")
+
+ assert_equal("1.2.3.4", ip)
+ end
+ end.join
+ end
+
+ # This test "hits deep" into C function call chain.
+ def test_socket_getnameinfo_domain_blocking
+ Thread.new do
+ scheduler = StubScheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ result = Socket.getnameinfo(["AF_INET", 80, "example.com"])
+
+ assert_equal([
+ "1.2.3.4",
+ "http"
+ ], result)
+ end
+ end.join
+ end
+end