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