首页 > 解决方案 > getaddrinfo 过期值(Linux 主机名条目)

问题描述

我正在编写一个 linux 用户空间应用程序,该应用程序打开一个无状态套接字(ICMP/UDP)到互联网主机用户指定一个主机名 FQDN(www.google.com),我使用 getaddrinfo(或旧的不推荐使用的 gethostbyname)函数来解析IPv4 地址。

DNS 的本质是主机条目可能会不时更新,但我只查询一次。有没有办法知道条目何时过期?我试图避免定期运行 getaddrinfo() (查询 OS DB),因为大规模会导致不需要的系统调用。

谢谢 !

标签: clinuxsocketsgetaddrinfogethostbyname

解决方案


作为一般规则,您应该getaddrinfo在每次使用(例如每个连接)时使用主机名,并依赖操作系统缓存的效率。

如果您出于某种原因担心性能或其他问题,您当然可以将自己的缓存保留在进程的内存中。但是,您似乎明白这可能会带来问题。缓存和保持状态会引入奇怪的错误。

在这些情况下,我建议至少通过向进程发送信号(例如 SIGHUP)或命令来实现清除缓存的选项,以便它知道清除缓冲区并重新连接,否则您会让一些系统管理员感到难过。

但是,这增加了软件的复杂性。这可以通过调用getaddrinfo每次使用来避免。您描述的情况似乎不需要增加不必要的复杂性。


推荐阅读