4#include <unordered_map>
45 void Load(std::istream& input);
83template<
typename TPoller>
95 TResolver(TPoller& poller, EDNSType defaultType = EDNSType::A);
144 std::coroutine_handle<> SenderSuspended;
149 EDNSType DefaultType;
151 struct TResolveRequest {
155 bool operator==(
const TResolveRequest& other)
const {
156 return Name == other.Name && Type == other.Type;
159 size_t hash()
const {
160 std::size_t result = 0;
161 result ^= std::hash<std::string>()(Name) + 0x9e3779b9 + (result << 6) + (result >> 2);
162 result ^= std::hash<EDNSType>()(Type) + 0x9e3779b9 + (result << 6) + (result >> 2);
167 struct TResolveRequestHash
169 std::size_t operator()(
const TResolveRequest& c)
const
175 std::queue<TResolveRequest> AddResolveQueue;
176 std::queue<std::pair<TTime, TResolveRequest>> TimeoutsQueue;
178 struct TResolveResult {
179 std::vector<TAddress> Addresses = {};
180 std::exception_ptr Exception =
nullptr;
184 void ResumeWaiters(TResolveResult&& result,
const TResolveRequest& req);
186 std::unordered_map<TResolveRequest, TResolveResult, TResolveRequestHash> Results;
187 std::unordered_map<TResolveRequest, std::vector<std::coroutine_handle<>>, TResolveRequestHash> WaitingAddrs;
188 std::unordered_map<uint64_t, TResolveRequest> Inflight;
195 THostPort(
const std::string& hostPort);
196 THostPort(
const std::string& host,
int port);
A class representing an IPv4 or IPv6 address (with port).
Definition address.hpp:30
Reads and stores DNS configuration from a file or an input stream.
Definition resolver.hpp:20
std::vector< TAddress > Nameservers
A vector of nameserver addresses.
Definition resolver.hpp:42
TResolvConf(std::istream &input)
Constructs a TResolvConf from an input stream.
TResolvConf(const std::string &fn="/etc/resolv.conf")
Constructs a TResolvConf and loads DNS configuration from a file.
Resolves hostnames into IP addresses using a custom poller.
Definition resolver.hpp:84
TFuture< std::vector< TAddress > > Resolve(const std::string &hostname, EDNSType type=EDNSType::DEFAULT)
Resolves a hostname to a list of addresses.
TResolver(TAddress dnsAddr, TPoller &poller, EDNSType defaultType=EDNSType::A)
Constructs a TResolver using a specific DNS address.
TResolver(TPoller &poller, EDNSType defaultType=EDNSType::A)
Constructs a TResolver using the default resolv configuration.
TResolver(const TResolvConf &conf, TPoller &poller, EDNSType defaultType=EDNSType::A)
Constructs a TResolver with a specified DNS configuration.
High-level asynchronous socket for network communication.
Definition socket.hpp:364
Implementation of a promise/future system for coroutines.
Future type for coroutines returning a value of type T.
Definition corochain.hpp:177