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

WinSock getaddrinfo to get IP from hostname fails until ipconfig /flushdns is called

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

我们看到了失败的案例。同时失败:

修复 getaddrinfoping -4 失败情况的解决方案是 运行

ipconfig /flushdns

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

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

Is there a way to programmatically clear that cache (doing whatever ipconfig /flushdns does)

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