chromium56:SystemHostResolverCall域名解析调用堆栈
概述
在Android平台上,Chromium主要支持三种DNS机制,分别为基于系统调用的getaddrinfo()
,自己构造数据包并处理请求的AsyncDNS,以及基于TCP的DNS协议。本文暂时仅分析前两者,事实上最后一项是在普通DNS请求失败时所进行的fallback,没有什么特殊的地方。
核心思路
首先,DNS解析的实际操作由HostResolverImpl::Job::Start()
函数发起,该函数所属的类继承自PrioritizedDispatcher::Job
以及HostResolverImpl::DnsTask::Delegate
。由这个多重继承可见,HostResolverImpl::Job
实际上具备两种属性:一方面,它是一个能够被调度执行的任务实体;另一方面,它继承了DnsTask
的委托接口,用于执行实际的请求工作。通用的抽象Job
类主要包含一个Start()
方法,用于启动任务。而