WinSock getaddrinfo从主机名获取IP失败,直到调用ipconfig / flushdns

时间:2019-07-15 19:08:10

标签: winapi dns ping winsock getaddrinfo

通常通过调用getaddrinfo(实际上只是WspiapiGetAddrInfo的别名)来从主机名获取IP地址。

我们看到失败的情况。与失败同时发生:

  • ping {hostname}能够很好地解析主机名。

  • ping -4 {hostname}也无法解析主机名,就像getaddrinfo一样。

要解决getaddrinfoping -4故障情况的解决方案是运行

ipconfig /flushdns

以上内容似乎表明ping -4getaddrinfo正在使用内部DNS缓存中的一个(显然是错误的)条目来解析地址。

有没有办法以编程方式清除缓存(执行ipconfig /flushdns做的事情),或者更好的是让getaddrinfo不使用缓存?

1 个答案:

答案 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);