String HHVM_FUNCTION(gethostbyname, const String& hostname) { IOStatusHelper io("gethostbyname", hostname.data()); if (RuntimeOption::EnableDnsCache) { Variant success; Variant resolved = f_apc_fetch(hostname, ref(success), SHARED_STORE_DNS_CACHE); if (same(success, true)) { if (same(resolved, false)) { return hostname; } return resolved.toString(); } } HostEnt result; if (!safe_gethostbyname(hostname.data(), result)) { if (RuntimeOption::EnableDnsCache) { f_apc_store(hostname, false, RuntimeOption::DnsCacheTTL, SHARED_STORE_DNS_CACHE); } return hostname; } struct in_addr in; memcpy(&in.s_addr, *(result.hostbuf.h_addr_list), sizeof(in.s_addr)); String ret(safe_inet_ntoa(in)); if (RuntimeOption::EnableDnsCache) { f_apc_store(hostname, ret, RuntimeOption::DnsCacheTTL, SHARED_STORE_DNS_CACHE); } return ret; }
std::string Util::GetPrimaryIP() { struct utsname buf; uname((struct utsname *)&buf); HostEnt result; if (!safe_gethostbyname(buf.nodename, result)) { return buf.nodename; } struct in_addr in; memcpy(&in.s_addr, *(result.hostbuf.h_addr_list), sizeof(in.s_addr)); return safe_inet_ntoa(in); }
Variant HHVM_FUNCTION(gethostbynamel, const String& hostname) { IOStatusHelper io("gethostbynamel", hostname.data()); HostEnt result; if (!safe_gethostbyname(hostname.data(), result)) { return false; } Array ret; for (int i = 0 ; result.hostbuf.h_addr_list[i] != 0 ; i++) { struct in_addr in = *(struct in_addr *)result.hostbuf.h_addr_list[i]; ret.append(String(safe_inet_ntoa(in))); } return ret; }
String HHVM_FUNCTION(long2ip, int64_t proper_address) { struct in_addr myaddr; myaddr.s_addr = htonl(proper_address); return safe_inet_ntoa(myaddr); }