1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Add scheduler hook Addrinfo.getaddrinfo. (#4375)

Co-authored-by: Bruno Sutic <code@brunosutic.com>
This commit is contained in:
Samuel Williams 2021-06-14 16:21:08 +12:00 committed by GitHub
parent 688b217706
commit 2792acc8f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
Notes: git 2021-06-14 13:21:30 +09:00
Merged-By: ioquatix <samuel@codeotaku.com>
9 changed files with 626 additions and 278 deletions

View file

@ -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.

View file

@ -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

View file

@ -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");

View file

@ -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);

View file

@ -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);

View file

@ -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 */

View file

@ -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);
}

View file

@ -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

View file

@ -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