场景:
android ndk 开发
两个进程,一个主进程,一个子进程,主进程创建子进程
主进程和子进程都调用getaddrinfo做域名解析
现象:
主进程域名解析一切OK
子进程失败,错误码:HOST_NOT_FOUND
一直以为是android的bug,去网上找,没有任何相关的问题和解答。
后来想到创建子进程使用了自己写的一个封装类,不知道直接用fork + exec情况如何。试了一下,没有这个问题,这就好办了,对比一下就应该能找到原因了。
我们的进程分装类里面在fork + exec的基础上,还在子进程关闭了所有从父进程继承的描述符(除了0、1、2),去掉这段逻辑解决问题。
仔细研究一下android平台用fork + exec创建的子进程情况,发现子进程不做任何事就已经有很多打开的文件描述符了,从8一直到18都是打开的。这其中某一些应该与域名解析有关。