小编col*_*.mc的帖子

如果DNS超时,则使用getaddrinfo()仅首次检查nscd缓存

如果我得到一个初始的"名称或服务未知"(EAI_NONAME),下一次调用getaddrinfo()似乎直接转到dns而不是先检查缓存(nscd日志显示没有查找尝试,tcpdump显示流量到DNS服务器).如果第一次调用成功获取地址,从那时起,所有getaddrinfo()调用首先转到nscd,如预期的那样.

我正在针对arm linux编译glibc-2.13.在我的rc.d中,nscd在我的守护进程之前启动.nscd设置为禁止共享缓存,并维护主机缓存.我正在使用busybox中的nscd(0.47).设置了nsswitch.conf,以便主机检查cache/files/dns.hosts.conf设置为check files/bind.

我的守护进程正在调用getaddrinfo().

我有运行nscd的调试日志,它们显示客户端开始读取DNS响应关闭时出现"Broken Pipe"错误.

之后它会显示其他守护进程试图使用缓存的GAI尝试(所以我知道它不是nscd锁定或任何东西),但是获得EAI_NONAME的守护进程再也不会联系nscd进行缓存查找.

如果我重新启动守护程序,如果第一个DNS查询再次超时,我会得到相同的行为.

glibc中有什么东西使我的守护进程到缓存的链接无效吗?有没有办法将我的守护进程重新连接到缓存而不重新启动它(类似于通过res_init()强制resolv.conf重新加载)?

c linux nss getaddrinfo

11
推荐指数
1
解决办法
2674
查看次数

标签 统计

c ×1

getaddrinfo ×1

linux ×1

nss ×1