程序当未连接网络时调用 gethostbyname_r, 返回值为 2, try again。程序并未退出,一直在retry。但是当网络连上时,返回值还是2,并不会成功。如果重启程序则正常。
推断的可能是,gethostbyname_r 会 cache /etc/resolv.conf 里记录的dns server 的信息。导致即使/etc/resolv.conf 在被 udhcpd, dhclient 等修改后,它还是不更新。 目前的修复方法,如果gethostbyname_r 失败,则调用 res_init 重新load /etc/resolv.conf
res_init man 手册虽然告诉你连接 -lresolv 库,但是其实 res_init 在 resolv.h 中被定义为 __res_init ,而此函数是在 libc 。 所以必须得包含 resolv.h 文件,否则会导致:undefined reference to `res_init 。查了半天,奇怪的是没包含 resolv.h 编译compile竟然不报错,等link时就通不过了,会出现