diff options
author | Luan Devecchi <luan@engineer.com> | 2021-08-01 00:25:55 +0300 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2021-09-04 10:54:31 +0300 |
commit | d8d9a9628aee5fd1beac05a4f45b645bb670ed3f (patch) | |
tree | 5700d7f4e5fcc98111a46558d000853dd0ff6873 /src | |
parent | a62d4d60f42f1b57f8094086caa90f3495c1a9e6 (diff) |
dns: add "tries" option to Resolve options
PR-URL: https://github.com/nodejs/node/pull/39610
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/cares_wrap.cc | 19 | ||||
-rw-r--r-- | src/cares_wrap.h | 7 |
2 files changed, 20 insertions, 6 deletions
diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index c11eb3880d8..9108d33effb 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -631,9 +631,14 @@ int ParseSoaReply( } } // anonymous namespace -ChannelWrap::ChannelWrap(Environment* env, Local<Object> object, int timeout) +ChannelWrap::ChannelWrap( + Environment* env, + Local<Object> object, + int timeout, + int tries) : AsyncWrap(env, object, PROVIDER_DNSCHANNEL), - timeout_(timeout) { + timeout_(timeout), + tries_(tries) { MakeWeak(); Setup(); @@ -647,11 +652,13 @@ void ChannelWrap::MemoryInfo(MemoryTracker* tracker) const { void ChannelWrap::New(const FunctionCallbackInfo<Value>& args) { CHECK(args.IsConstructCall()); - CHECK_EQ(args.Length(), 1); + CHECK_EQ(args.Length(), 2); CHECK(args[0]->IsInt32()); + CHECK(args[1]->IsInt32()); const int timeout = args[0].As<Int32>()->Value(); + const int tries = args[1].As<Int32>()->Value(); Environment* env = Environment::GetCurrent(args); - new ChannelWrap(env, args.This(), timeout); + new ChannelWrap(env, args.This(), timeout, tries); } GetAddrInfoReqWrap::GetAddrInfoReqWrap( @@ -704,6 +711,7 @@ void ChannelWrap::Setup() { options.sock_state_cb = ares_sockstate_cb; options.sock_state_cb_data = this; options.timeout = timeout_; + options.tries = tries_; int r; if (!library_inited_) { @@ -717,7 +725,8 @@ void ChannelWrap::Setup() { /* We do the call to ares_init_option for caller. */ const int optmask = - ARES_OPT_FLAGS | ARES_OPT_TIMEOUTMS | ARES_OPT_SOCK_STATE_CB; + ARES_OPT_FLAGS | ARES_OPT_TIMEOUTMS | + ARES_OPT_SOCK_STATE_CB | ARES_OPT_TRIES; r = ares_init_options(&channel_, &options, optmask); if (r != ARES_SUCCESS) { diff --git a/src/cares_wrap.h b/src/cares_wrap.h index 8647868efde..3cd6981bf5c 100644 --- a/src/cares_wrap.h +++ b/src/cares_wrap.h @@ -147,7 +147,11 @@ struct NodeAresTask final : public MemoryRetainer { class ChannelWrap final : public AsyncWrap { public: - ChannelWrap(Environment* env, v8::Local<v8::Object> object, int timeout); + ChannelWrap( + Environment* env, + v8::Local<v8::Object> object, + int timeout, + int tries); ~ChannelWrap() override; static void New(const v8::FunctionCallbackInfo<v8::Value>& args); @@ -181,6 +185,7 @@ class ChannelWrap final : public AsyncWrap { bool is_servers_default_ = true; bool library_inited_ = false; int timeout_; + int tries_; int active_query_count_ = 0; NodeAresTask::List task_list_; }; |