diff options
author | Riccardo Spagni <ric@spagni.net> | 2017-10-02 23:21:10 +0400 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2017-10-02 23:21:10 +0400 |
commit | abe24f4429f126a41fd945418184806db785b84b (patch) | |
tree | 6e3f6a7a594b20a32a9d54ea642fbc1b60de32c7 /src/common | |
parent | Merge pull request #2503 (diff) | |
parent | dns_utils: query DNS records in parallel (diff) | |
download | monero-abe24f4429f126a41fd945418184806db785b84b.tar.xz |
Merge pull request #2504
f182acdd dns_utils: query DNS records in parallel (moneromooo-monero)
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/dns_utils.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp index 9c306505e..1310b8bfd 100644 --- a/src/common/dns_utils.cpp +++ b/src/common/dns_utils.cpp @@ -443,19 +443,28 @@ bool load_txt_records_from_dns(std::vector<std::string> &good_records, const std std::uniform_int_distribution<int> dis(0, dns_urls.size() - 1); size_t first_index = dis(gen); - bool avail, valid; + // send all requests in parallel + std::vector<boost::thread> threads(dns_urls.size()); + std::deque<bool> avail(dns_urls.size(), false), valid(dns_urls.size(), false); + for (size_t n = 0; n < dns_urls.size(); ++n) + { + threads[n] = boost::thread([n, dns_urls, &records, &avail, &valid](){ + records[n] = tools::DNSResolver::instance().get_txt_record(dns_urls[n], avail[n], valid[n]); + }); + } + for (size_t n = 0; n < dns_urls.size(); ++n) + threads[n].join(); + size_t cur_index = first_index; do { - std::string url = dns_urls[cur_index]; - - records[cur_index] = tools::DNSResolver::instance().get_txt_record(url, avail, valid); - if (!avail) + const std::string &url = dns_urls[cur_index]; + if (!avail[cur_index]) { records[cur_index].clear(); LOG_PRINT_L2("DNSSEC not available for checkpoint update at URL: " << url << ", skipping."); } - if (!valid) + if (!valid[cur_index]) { records[cur_index].clear(); LOG_PRINT_L2("DNSSEC validation failed for checkpoint update at URL: " << url << ", skipping."); |