【BUG精选】00.IPC程序DNS请求一直发送到127.0.0.1

【BUG精选】00.IPC程序DNS请求一直发送到127.0.0.1

问题现象:

  1. 设备挂测/重启,偶现程序请求DNS到127.0.0.1,无法拿到域名对应的IP地址,平台无法连接。
  2. 但是Linux下的网络功能是正常的,可以正常的ping通服务器,拿到域名对应的IP地址。

问题定位:

  1. 通过查阅uclibc的源码,gethostaddr的具体实现,发现存在如下的逻辑:
  2. 每次调用DNS相关的参数,都会去读取文件/etc/resolv.conf文件,如果这个文件的修改时间和上次访问的时间一致,则不再更新,如果不一致,晚于之前记录的时间,则进行更新代码中全局变量存储的值。
  3. 基于此推测,可能由于多线程冲突,在他读取的时候,另外一个线程恰巧清空了整个文件,然后他读到空,就会去127.0.0.1 DNS请求。同时,清空文件的线程和读取文件的线程几乎是同一时间,导致代码后续再次调用获取域名IP的时候,不会再去更新全局配置中的DNS服务器地址。

问题解决:

  1. 在出现DNS获取失败的时候,调用函数:utime(“/tmp/resolv.conf”, NULL);
  2. 即可更新该文件的修改、访问时间,那uclibc就可以重新读取该文件的配置,正常的请求DNS了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值