c - getaddrinfo 过期值(Linux 主机名条目)
问题描述
我正在编写一个 linux 用户空间应用程序,该应用程序打开一个无状态套接字(ICMP/UDP)到互联网主机用户指定一个主机名 FQDN(www.google.com),我使用 getaddrinfo(或旧的不推荐使用的 gethostbyname)函数来解析IPv4 地址。
DNS 的本质是主机条目可能会不时更新,但我只查询一次。有没有办法知道条目何时过期?我试图避免定期运行 getaddrinfo() (查询 OS DB),因为大规模会导致不需要的系统调用。
谢谢 !
解决方案
作为一般规则,您应该getaddrinfo
在每次使用(例如每个连接)时使用主机名,并依赖操作系统缓存的效率。
如果您出于某种原因担心性能或其他问题,您当然可以将自己的缓存保留在进程的内存中。但是,您似乎明白这可能会带来问题。缓存和保持状态会引入奇怪的错误。
在这些情况下,我建议至少通过向进程发送信号(例如 SIGHUP)或命令来实现清除缓存的选项,以便它知道清除缓冲区并重新连接,否则您会让一些系统管理员感到难过。
但是,这增加了软件的复杂性。这可以通过调用getaddrinfo
每次使用来避免。您描述的情况似乎不需要增加不必要的复杂性。
推荐阅读
- mysql - 如何计算条件中的行数?
- php - 模型连接无法正常工作 - Laravel
- c - 奇怪的盒装输出
- email - Laravel Mailable | ->from($this->input->mail)
- google-analytics - histogram or group users by number of campaigns they received
- python - C struct encoded binary data file read in python
- javascript - Modify object while passing through react component
- python - how to read tfrecord file
- javascript - 添加浏览器路由器后,我收到警告
- c# - How to update HREF after anchor gets clicked in Blazor?