【问题标题】:getaddrinfo expiration value (Linux hostname entries)getaddrinfo 过期值(Linux 主机名条目)
【发布时间】:2021-08-27 05:30:35
【问题描述】:
我正在编写一个 linux 用户空间应用程序,它打开一个无状态套接字 (ICMP/UDP) 到互联网主机
用户指定主机名 FQDN (www.google.com),我使用 getaddrinfo(或旧的不推荐使用的 gethostbyname)函数解析为 IPv4 地址。
DNS 的本质是主机条目可能会不时更新,但我只查询一次。
有没有办法知道条目何时过期?
我试图避免定期运行 getaddrinfo()(查询 OS DB),因为大规模运行会导致不需要的系统调用。
谢谢!
【问题讨论】:
标签:
c
linux
sockets
getaddrinfo
gethostbyname
【解决方案1】:
作为一般规则,您应该在每次使用(例如每个连接)时使用带有主机名的getaddrinfo,并依赖操作系统缓存的效率。
如果您出于某种原因担心性能或其他问题,当然可以将自己的缓存保留在进程的内存中。但是,您似乎明白这可能会带来问题。缓存和保持状态会引入奇怪的错误。
在这些情况下,我建议至少实现一个选项,通过向进程发送信号(例如 SIGHUP)或命令来清除缓存,以便它知道清除缓冲区并重新连接,否则您会让一些系统管理员感到难过。
但是,这增加了软件的复杂性。这可以通过在每次使用时调用getaddrinfo 来避免。您描述的情况似乎不需要增加不必要的复杂性。