diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2021-06-14 16:21:08 +1200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-14 16:21:08 +1200 |
commit | 2792acc8f29c6ee1d04b57b7b70d43519a0ceda8 (patch) | |
tree | f34d853b85cac91a51cb2500c9c4b765433e3672 /ext | |
parent | 688b217706546c2bc9a0926de246dc29d0935261 (diff) |
Add scheduler hook `Addrinfo.getaddrinfo`. (#4375)
Co-authored-by: Bruno Sutic <code@brunosutic.com>
Notes
Notes:
Merged-By: ioquatix <samuel@codeotaku.com>
Diffstat (limited to 'ext')
-rw-r--r-- | ext/socket/depend | 435 | ||||
-rw-r--r-- | ext/socket/raddrinfo.c | 125 | ||||
-rw-r--r-- | ext/socket/rubysocket.h | 2 | ||||
-rw-r--r-- | ext/socket/socket.c | 32 |
4 files changed, 316 insertions, 278 deletions
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); |