/* */ #include "NameResolver.h" #include #include "DlAbortEx.h" #include "message.h" #include "fmt.h" #include "util.h" #include "SocketCore.h" #include "error_code.h" namespace aria2 { NameResolver::NameResolver() : socktype_(0), family_(AF_UNSPEC) {} void NameResolver::resolve(std::vector& resolvedAddresses, const std::string& hostname) { struct addrinfo* res; int s; s = callGetaddrinfo(&res, hostname.c_str(), nullptr, family_, socktype_, 0, 0); if (s) { throw DL_ABORT_EX2( fmt(EX_RESOLVE_HOSTNAME, hostname.c_str(), gai_strerror(s)), error_code::NAME_RESOLVE_ERROR); } std::unique_ptr resDeleter(res, freeaddrinfo); struct addrinfo* rp; for (rp = res; rp; rp = rp->ai_next) { auto endpoint = util::getNumericNameInfo(rp->ai_addr, rp->ai_addrlen); resolvedAddresses.push_back(endpoint.addr); } } void NameResolver::setSocktype(int socktype) { socktype_ = socktype; } } // namespace aria2