Skip to content

Commit 2e39460

Browse files
committed
Add support of DNS in yarn.
1 parent 82570f6 commit 2e39460

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

mrblib/yarn.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def resume(*args)
9999
*ret = @fiber.resume(*args)
100100

101101
if @fiber.alive?
102-
raise "invalid yield" unless ALIVE_CLASSES.any?{|v| ret.first.kind_of? v }
102+
raise "invalid yield #{ret.inspect}" unless ALIVE_CLASSES.any?{|v| ret.first.kind_of? v }
103103
else
104104
@fiber = nil
105105
@result = ret

src/mrb_uv.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -819,16 +819,16 @@ mrb_uv_getnameinfo(mrb_state *mrb, mrb_value self)
819819

820820
mrb_get_args(mrb, "&o|i", &block, &sock, &flags);
821821

822-
if (mrb_nil_p(block)) {
823-
mrb_raise(mrb, E_ARGUMENT_ERROR, "Expected callback in uv_getaddrinfo.");
824-
}
825-
826822
addr = (struct sockaddr*)mrb_data_check_get_ptr(mrb, sock, &mrb_uv_ip4addr_type);
827823
if (!addr) {
828824
addr = (struct sockaddr*)mrb_data_check_get_ptr(mrb, sock, &mrb_uv_ip6addr_type);
829825
}
830826

831827
req = mrb_uv_req_current(mrb, block, &ret);
828+
if (mrb_nil_p(req->block)) {
829+
mrb_uv_req_clear(req);
830+
mrb_raise(mrb, E_ARGUMENT_ERROR, "Expected callback in uv_getaddrinfo.");
831+
}
832832
mrb_uv_req_check_error(mrb, req, uv_getnameinfo(
833833
mrb_uv_current_loop(mrb), &req->req.getnameinfo,
834834
mrb_uv_getnameinfo_cb, addr, flags));
@@ -899,10 +899,6 @@ mrb_uv_getaddrinfo(mrb_state *mrb, mrb_value self)
899899

900900
mrb_get_args(mrb, "SS|H&", &node, &service, &mrb_hints, &b);
901901

902-
if (mrb_nil_p(b)) {
903-
mrb_raise(mrb, E_ARGUMENT_ERROR, "Expected callback in uv_getaddrinfo.");
904-
}
905-
906902
// parse hints
907903
value = mrb_hash_get(mrb, mrb_hints, mrb_symbol_value(mrb_intern_lit(mrb, "ai_family")));
908904
if (mrb_obj_equal(mrb, value, mrb_symbol_value(mrb_intern_lit(mrb, "ipv4")))) {
@@ -930,6 +926,10 @@ mrb_uv_getaddrinfo(mrb_state *mrb, mrb_value self)
930926
}
931927

932928
req = mrb_uv_req_current(mrb, b, &ret);
929+
if (mrb_nil_p(req->block)) {
930+
mrb_uv_req_clear(req);
931+
mrb_raise(mrb, E_ARGUMENT_ERROR, "Expected callback in uv_getaddrinfo.");
932+
}
933933
mrb_uv_req_check_error(mrb, req, uv_getaddrinfo(
934934
mrb_uv_current_loop(mrb), &req->req.getaddrinfo, _uv_getaddrinfo_cb,
935935
RSTRING_PTR(node), RSTRING_PTR(service), &hints));

test/yarn.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,18 @@
2525

2626
assert_nil y.error
2727
end
28+
29+
assert 'Yarn DNS' do
30+
y = UV::Yarn.new do
31+
host, service = UV.getnameinfo(UV::Ip4Addr.new('127.0.0.1', 80))
32+
assert_kind_of String, host
33+
assert_equal 'http', service
34+
35+
err, a = UV.getaddrinfo 'example.com', 'http'
36+
assert_nil err
37+
assert_equal 80, a.addr.sin_port
38+
end
39+
y.start
40+
y.loop.run
41+
assert_nil y.error
42+
end

0 commit comments

Comments
 (0)