bool DNS::HostByName(Exception& ex, const char* hostname, HostEntry& host) { if (!Net::InitializeNetwork(ex)) return false; struct addrinfo* pAI; struct addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; int rc = getaddrinfo(hostname, NULL, &hints, &pAI); if (rc == 0) { host.set(ex,pAI); freeaddrinfo(pAI); return true; } SetAIError(ex,rc, " (hostname=",hostname,")"); return false; }
// BEWARE blocking method!! bool DNS::HostByAddress(Exception& ex,const IPAddress& address, HostEntry& host) { if (!Net::InitializeNetwork(ex)) return false; SocketAddress sa; sa.set(address, 0); static char fqname[1024]; int rc = getnameinfo(sa.addr(), sa.size(), fqname, sizeof(fqname), NULL, 0, NI_NAMEREQD); if (rc == 0) { struct addrinfo* pAI; struct addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; rc = getaddrinfo(fqname, NULL, &hints, &pAI); if (rc == 0) { host.set(ex, pAI); freeaddrinfo(pAI); return true; } } SetAIError(ex, rc, " (address=",address.toString(),")"); return false; }