【发布时间】:2016-04-17 20:53:15
【问题描述】:
这是在尝试构建 DNS 客户端/服务器系统时遇到的问题...
诸如getaddrinfo 或gethostbyname 之类的函数借助某种DNS 解析来回答查询。我已经挖掘了很多源代码,但实际上从未见过任何代码行,其中一个套接字是打开的,并且在 DNS 服务器和客户端之间发生了通信。
我的问题是,gethostbyname 之类的函数如何在读取套接字等时不阻塞地执行网络操作(例如 DNS 查找)?从用户的角度来看,gethostbyname 似乎在操作中几乎是瞬间的......
【问题讨论】:
-
你怎么得到它不等待?你扫了吗?问题是什么?你读过函数的源代码吗?
-
我很抱歉。它确实在等待,但似乎很快就完成了。我只是好奇这些函数的内部工作原理,比如它们是否使用非阻塞套接字、某种 IO 轮询等等。到目前为止,我挖掘的源代码甚至没有暗示套接字操作。
-
很可能
gethostbyname和getaddrinfo最终会使用来自libresolv的res_*函数,因此请寻找后者的来源。 -
Wiki:“DNS 主要使用端口号 53 上的用户数据报协议 (UDP) 来处理请求”。所以,套接字,UDP :)
标签: c sockets networking dns network-programming