Skip to content

Commit 579d7da

Browse files
committed
Add scheduler hook Addrinfo.getaddrinfo.
1 parent b4ec4a4 commit 579d7da

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

ext/socket/raddrinfo.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
#include "rubysocket.h"
1212

13+
#include "internal/scheduler.h"
14+
1315
#if defined(INET6) && (defined(LOOKUP_ORDER_HACK_INET) || defined(LOOKUP_ORDER_HACK_INET6))
1416
#define LOOKUP_ORDERS (sizeof(lookup_order_table) / sizeof(lookup_order_table[0]))
1517
static const int lookup_order_table[] = {
@@ -2614,6 +2616,12 @@ static ID id_timeout;
26142616
static VALUE
26152617
addrinfo_s_getaddrinfo(int argc, VALUE *argv, VALUE self)
26162618
{
2619+
VALUE scheduler = rb_scheduler_current();
2620+
2621+
if (scheduler != Qnil) {
2622+
return rb_scheduler_address_resolve(scheduler, argc, argv);
2623+
}
2624+
26172625
VALUE node, service, family, socktype, protocol, flags, opts, timeout;
26182626

26192627
rb_scan_args(argc, argv, "24:", &node, &service, &family, &socktype,

internal/scheduler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,6 @@ VALUE rb_scheduler_io_read(VALUE scheduler, VALUE io, VALUE buffer, size_t offse
3838
int rb_scheduler_supports_io_write(VALUE scheduler);
3939
VALUE rb_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t offset, size_t length);
4040

41+
VALUE rb_scheduler_address_resolve(VALUE scheduler, int argc, VALUE * argv);
42+
4143
#endif /* RUBY_SCHEDULER_H */

scheduler.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ static ID id_io_read;
2323
static ID id_io_write;
2424
static ID id_io_wait;
2525

26+
static ID id_address_resolve;
27+
2628
void
2729
Init_Scheduler(void)
2830
{
@@ -36,6 +38,8 @@ Init_Scheduler(void)
3638
id_io_read = rb_intern_const("io_read");
3739
id_io_write = rb_intern_const("io_write");
3840
id_io_wait = rb_intern_const("io_wait");
41+
42+
id_address_resolve = rb_intern_const("address_resolve");
3943
}
4044

4145
VALUE
@@ -172,3 +176,9 @@ rb_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t offset, si
172176
// We should ensure string has capacity to receive data, and then resize it afterwards.
173177
return rb_funcall(scheduler, id_io_write, 4, io, buffer, SIZET2NUM(offset), SIZET2NUM(length));
174178
}
179+
180+
VALUE
181+
rb_scheduler_address_resolve(VALUE scheduler, int argc, VALUE * argv)
182+
{
183+
return rb_funcallv(scheduler, id_address_resolve, argc, argv);
184+
}

0 commit comments

Comments
 (0)