n00*_*000 22 c unix networking
getaddrinfo()是我们在创建socket()或connect()之前需要使用的函数,对吗?那么getaddrinfo首先如何与DNS服务器通信?
PS:我在哪里可以看到getaddrinfo的完整来源?
简短的回答是" 它询问系统 ",而后者又知道如何进行DNS查找以及使用哪些服务器.
getaddrinfo()由getaddrinfo(3)手册页记录,这意味着它是一个C库函数.它也是一个POSIX函数,因此没有规范的"源"; 符合POSIX的操作系统的每个标准C库都将实现自己的版本.无论哪种方式,只是该功能的源可能不太有启发性,因为它只会调用其他函数和OS API,并且您必须向下钻取到达实际的DNS机制.如果您对如何工作感兴趣,最好阅读DNS协议本身的文档.
你的Unix系统是否有文件/etc/nsswitch.conf?如果是,则"hosts"条目给出将主机名解析为IP地址的搜索顺序.您的系统是否有/etc/resolv.conf文件?如果是,则指定要使用的DNS服务器.
正如你所看到的,getaddrinfo()可以做很多事情(可能需要一段时间)!