Advertisement

libevent 的一个优化版本实现了Android平台的一个改进

阅读量:

在 Android 平台上尝试借助 libevent 实现下载功能时,遇到了与域名解析相关的问题,发现 libevent 无法正确获取 DNS 服务器信息。对此进行了源码层面的探究,最终定位到了具体原因。

通常情况下,利用 libevent 进行异步 DNS 解析的操作流程如下:

  1. 调用 evdns_base_new 函数,并传入 event_base 对象以及 initialize_nameservers 参数,用于创建 evdns_base 实例
  2. 接下来通过 evdns_getaddrinfo 函数发起解析请求,并设置对应的回调函数以处理结果
  3. 最后在回调函数内部对解析所得数据进行处理

一般而言,在调用 evdns_base_new 函数时,会将第二个参数设为 1,这样 libevent 可以自动从系统配置中读取 nameservers 的信息。在 Windows 系统中该操作涉及注册表读取,而在 Linux 系统中则会访问 /etc/resolv.conf 文件。然而问题出现在 Android 平台,并不存在 resolv.conf 文件,而 libevent 源码中并未对此情况进行特殊处理。通过查阅 evdns.c 文件中定义的 evdns_base_new 函数实现可以发现:

复制代码
 struct evdns_base *

全部评论 (0)

还没有任何评论哟~