ruby-changes:66471
From: Samuel <ko1@a...>
Date: Mon, 14 Jun 2021 13:21:30 +0900 (JST)
Subject: [ruby-changes:66471] 2792acc8f2 (master): Add scheduler hook `Addrinfo.getaddrinfo`. (#4375)
https://git.ruby-lang.org/ruby.git/commit/?id=2792acc8f2 From 2792acc8f29c6ee1d04b57b7b70d43519a0ceda8 Mon Sep 17 00:00:00 2001 From: Samuel Williams <samuel.williams@o...> Date: Mon, 14 Jun 2021 16:21:08 +1200 Subject: Add scheduler hook `Addrinfo.getaddrinfo`. (#4375) Co-authored-by: Bruno Sutic <code@b...> --- doc/fiber.md | 7 + ext/socket/depend | 435 +++++++++++++++++++------------------ ext/socket/raddrinfo.c | 125 ++++++++--- ext/socket/rubysocket.h | 2 +- ext/socket/socket.c | 32 +-- include/ruby/fiber/scheduler.h | 2 + scheduler.c | 14 ++ test/fiber/scheduler.rb | 6 + test/fiber/test_address_resolve.rb | 281 ++++++++++++++++++++++++ 9 files changed, 626 insertions(+), 278 deletions(-) create mode 100644 test/fiber/test_address_resolve.rb diff --git a/doc/fiber.md b/doc/fiber.md index 840bebd..9baab4e 100644 --- a/doc/fiber.md +++ b/doc/fiber.md @@ -90,6 +90,13 @@ class Scheduler https://github.com/ruby/ruby/blob/trunk/doc/fiber.md#L90 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 4997df1..7538345 100644 --- a/ext/socket/depend +++ b/ext/socket/depend @@ -13,6 +13,21 @@ constdefs.c: constdefs.h https://github.com/ruby/ruby/blob/trunk/ext/socket/depend#L13 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/depend#L167 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/depend#L195 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/depend#L349 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/depend#L377 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/depend#L531 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/depend#L560 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/depend#L714 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 ifad (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/