1、dns cache相关的数据结构,cache.c中定义,是一个hash表加链表的结构。节点为:struct crec

2、主要处理逻辑在check_dns_listeners()函数, 有最大连接数限制。
check_dns_listeners()函数里面做对应的判断,如果是请求的则调用receive_query()函数,在cache里面没有找到就调用forward_query()函数转发到dns服务器,查到结果后就使用reply_query()函数返回给对应的IP。为了获取到哪个IP请求,请求的域名,在forward_query()函数里面打印,为daemon->namebuff和daemon->addrbuff。

3、主要函数是receive_query, forward_query, reply_query等
receive_query - 主要是解析数据报,看看缓存有没有,有且未超时则使用缓存answer_request处理封装相应,没有就调用forward_query

forward_query - 主要做的就是将数据报文发送到所有的dns服务器,来自/tmp/resolve.conf.auto

reply_query - 接受dns服务器的响应,收到后查找是哪个请求,没有找到则丢弃,找到了,就根据SOA,等取出

此外,还有如下三个重要函数:


