通常通过调用getaddrinfo
(实际上只是WspiapiGetAddrInfo
的别名)来从主机名获取IP地址。
我们看到失败的情况。与失败同时发生:
ping {hostname}
能够很好地解析主机名。
ping -4 {hostname}
也无法解析主机名,就像getaddrinfo
一样。
要解决getaddrinfo
和ping -4
故障情况的解决方案是运行
ipconfig /flushdns
以上内容似乎表明ping -4
和getaddrinfo
正在使用内部DNS缓存中的一个(显然是错误的)条目来解析地址。
有没有办法以编程方式清除缓存(执行ipconfig /flushdns
做的事情),或者更好的是让getaddrinfo
不使用缓存?
答案 0 :(得分:2)
有没有办法以编程方式清除该缓存(执行任何操作 ipconfig / flushdns确实如此)
ipconfig /flushdns
执行此操作:
typedef BOOL(WINAPI *DFRC)();
DFRC DnsFlushResolverCache;
HMODULE hDll = LoadLibrary(L"DnsApi.dll");
DnsFlushResolverCache = (DFRC)GetProcAddress(hDll, "DnsFlushResolverCache");
BOOL bRet = DnsFlushResolverCache();
// code...
FreeLibrary(hDll);