Consider the following scenario:
- You use a flat name without any suffixes to run a query for a host name.
- You have a suffix search list, and this host name is resolvable through one of these suffixes other than the last suffix in the list.
- You run GetAddrInfo for the AF_INET6 family first, and then you run that command for the AF_INET family.
In this scenario, the function can't resolve the provided host name, and you receive the "WSAHOST_NOT_FOUND (11001)" error message.
For example, you have the following environment:
Suffix Search List: contoso.com, foo.contoso.com, bar.contoso.com
Host name trying to be resolved: test
Host DNS A record present in: foo.contoso.com
When you try to run the following sample code, the calls fail with the 11001 error.
hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = 0; hints.ai_family = AF_INET6; getaddrinfo("test", NULL, &hints, &res) hints.ai_family = AF_INET; getaddrinfo("test", NULL, &hints, &res)
This issue can be avoided by using the following methods. The issue will not occur if you:
- Use AF_UNSPEC for the family and let our code determine the A/AAAA results for you.
- Put the suffix with the matching host A record as the last entry in the suffix search list.
- Disable negative caching on the DNS client.
- Pass the fully qualified host name to be resolved.
The first option is the recommended method, as there's usually no need to do the calls on a per family basis, and Windows is much better optimized to return the best possible set of results for both families.