Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuan Devecchi <luan@engineer.com>2021-08-01 00:25:55 +0300
committerMichaël Zasso <targos@protonmail.com>2021-09-04 10:54:31 +0300
commitd8d9a9628aee5fd1beac05a4f45b645bb670ed3f (patch)
tree5700d7f4e5fcc98111a46558d000853dd0ff6873 /src
parenta62d4d60f42f1b57f8094086caa90f3495c1a9e6 (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.cc19
-rw-r--r--src/cares_wrap.h7
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_;
};