22 using Deleter = void(*)(addrinfo *);
25 :
data{std::move(addr)}
34 std::unique_ptr<addrinfo, Deleter>
data;
45 : hostname{host}, service{serv}
74 class GetAddrInfoReq final:
public Request<GetAddrInfoReq, uv_getaddrinfo_t> {
75 static void addrInfoCallback(uv_getaddrinfo_t *req,
int status, addrinfo *res) {
76 auto ptr = reserve(req);
81 auto data = std::unique_ptr<addrinfo, void(*)(addrinfo *)>{
82 res, [](addrinfo *addr){ uv_freeaddrinfo(addr); }};
88 void nodeAddrInfo(
const char *node,
const char *service, addrinfo *hints =
nullptr) {
89 invoke(&uv_getaddrinfo, parent(),
get(), &addrInfoCallback, node, service, hints);
92 auto nodeAddrInfoSync(
const char *node,
const char *service, addrinfo *hints =
nullptr) {
94 auto err = uv_getaddrinfo(parent(), req,
nullptr, node, service, hints);
95 auto data = std::unique_ptr<addrinfo, void(*)(addrinfo *)>{req->addrinfo, [](addrinfo *addr){ uv_freeaddrinfo(addr); }};
96 return std::make_pair(!err, std::move(
data));
100 using Deleter = void(*)(addrinfo *);
102 using Request::Request;
111 nodeAddrInfo(node.data(),
nullptr, hints);
125 std::pair<bool, std::unique_ptr<addrinfo, Deleter>>
127 return nodeAddrInfoSync(node.data(),
nullptr, hints);
137 nodeAddrInfo(
nullptr, service.data(), hints);
151 std::pair<bool, std::unique_ptr<addrinfo, Deleter>>
153 return nodeAddrInfoSync(
nullptr, service.data(), hints);
163 void addrInfo(std::string node, std::string service, addrinfo *hints =
nullptr) {
164 nodeAddrInfo(node.data(), service.data(), hints);
179 std::pair<bool, std::unique_ptr<addrinfo, Deleter>>
180 addrInfoSync(std::string node, std::string service, addrinfo *hints =
nullptr) {
181 return nodeAddrInfoSync(node.data(), service.data(), hints);
195 static void nameInfoCallback(uv_getnameinfo_t *req,
int status,
const char *hostname,
const char *service) {
196 auto ptr = reserve(req);
197 if(status) { ptr->publish(
ErrorEvent{status}); }
202 using Request::Request;
210 template<
typename I = IPv4>
211 void nameInfo(std::string ip,
unsigned int port,
int flags = 0) {
212 typename details::IpTraits<I>::Type addr;
213 details::IpTraits<I>::addrFunc(ip.data(), port, &addr);
214 auto saddr =
reinterpret_cast<const sockaddr *
>(&addr);
215 invoke(&uv_getnameinfo, parent(),
get(), &nameInfoCallback, saddr, flags);
223 template<
typename I = IPv4>
225 nameInfo<I>(addr.
ip, addr.
port, flags);
241 template<
typename I = IPv4>
242 std::pair<bool, std::pair<const char *, const char *>>
244 typename details::IpTraits<I>::Type addr;
245 details::IpTraits<I>::addrFunc(ip.data(), port, &addr);
247 auto saddr =
reinterpret_cast<const sockaddr *
>(&addr);
248 auto err = uv_getnameinfo(parent(), req,
nullptr, saddr, flags);
249 return std::make_pair(!err, std::make_pair(req->host, req->service));
264 template<
typename I = IPv4>
265 std::pair<bool, std::pair<const char *, const char *>>
267 return nameInfoSync<I>(addr.
ip, addr.
port, flags);
std::unique_ptr< addrinfo, Deleter > data
An initialized instance of addrinfo.
void nodeAddrInfo(std::string node, addrinfo *hints=nullptr)
Async getaddrinfo.
void nameInfo(std::string ip, unsigned int port, int flags=0)
Async getnameinfo.
std::pair< bool, std::pair< const char *, const char * > > nameInfoSync(Addr addr, int flags=0)
Sync getnameinfo.
The GetNameInfoReq request.
std::pair< bool, std::unique_ptr< addrinfo, Deleter > > nodeAddrInfoSync(std::string node, addrinfo *hints=nullptr)
Sync getaddrinfo.
void serviceAddrInfo(std::string service, addrinfo *hints=nullptr)
Async getaddrinfo.
void addrInfo(std::string node, std::string service, addrinfo *hints=nullptr)
Async getaddrinfo.
void nameInfo(Addr addr, int flags=0)
Async getnameinfo.
std::pair< bool, std::unique_ptr< addrinfo, Deleter > > serviceAddrInfoSync(std::string service, addrinfo *hints=nullptr)
Sync getaddrinfo.
const char * service
A valid service name.
The GetAddrInfoReq request.
std::pair< bool, std::unique_ptr< addrinfo, Deleter > > addrInfoSync(std::string node, std::string service, addrinfo *hints=nullptr)
Sync getaddrinfo.
std::pair< bool, std::pair< const char *, const char * > > nameInfoSync(std::string ip, unsigned int port, int flags=0)
Sync getnameinfo.
const char * hostname
A valid hostname.