概述
udp数据的处理主要的处理流程已经在http://blog.csdn.net/divlee130/article/details/46391981有所介绍,但是具体到当一个请求过来时是如何提取请求信息,然后根据请求如果处理下一步的操作等等。 这些到目前为止还不清楚。本文试图解决这个问题。本文的分析是基于client请求A记录且没有缓存的情况。
前言
主流程中epoll 监听socket事件,如有事件则处理相关的句柄,即相关的socket,fd句柄都是通过socket manager来管理的,如果是写socket 并且不是侦听者则进入dispatch_recve进行接收任务分发,这个过程是通过 isc_task_send来完成的。通过事件的type和action 最终确定任务的回调处理是client_request
client_request
通过创建client_create注册ISC_SOCKEVENT_RECVDONE事件,当有dns请求时会执行client_request回调处理相应的数据。
client->recvevent = (isc_socketevent_t *)
isc_event_allocate(client->mctx, client,
ISC_SOCKEVENT_RECVDONE,
client_request,