非阻塞网络地址解析(gethostbyname或getaddrinfo)?

mpr*_*net 7 c linux dns network-programming

使用经典的nsswitch.conf配置:

hosts:      files dns
Run Code Online (Sandbox Code Playgroud)

如果DNS没有应答(或配置错误),尝试使用gethostbyname(或getaddrinfo)解析名称可能需要一段时间.

有没有办法在nsswitch.conf中配置超时或使用管理超时的备用api?

Sjo*_*erd 6

getaddrinfo_a,但它特定于Linux特定的 GNU glibc.或者,您可以生成一个线程并在其中调用getaddrinfo.不要在线程中使用gethostbyname,因为它不是线程安全的.

  • @MartinJames你是对的,**它是线程安全的**.[MSDN gethostbyname](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738524%28v=vs.85%29.aspx):"由Winsock DLL从**线程本地内部分配storage**""...否则,返回值将被同一线程**上的后续gethostbyname或gethostbyaddr**调用覆盖." (2认同)