gpt4 book ai didi

c - 解析主机名

转载 作者:行者123 更新时间:2023-11-30 15:33:27 32 4
gpt4 key购买 nike

我可以使用

解析主机名

getaddrinfo ()

然后验证地址。我可以使用

connect(socket, sockaddr, len)

我不确定 connect 的作用。因为如果我尝试修改主机文件,例如修改主机名的 ip 地址。我的 connect() 仍然工作正常。

例如

foo.bar 1.1.1.1 ---> foo.bar 2.2.2.2

有什么办法知道哦,现在 1.1.1.1 不再有效,而是 2.2.2.2

最佳答案

getaddrinfo() 转换包含 sockaddr 结构的 addrinfo 结构,这些结构又可用于 connect()一个套接字,它只真正关心原始 IPv4/IPv6/Unix 域地址。 connect() 需要原始地址,但根本不知道或关心它们来自哪里(翻译、硬编码为 32 位整数等),并且连接到地址实际上并不是验证地址翻译后的地址是“正确的”地址,只是请求的原始地址上的某个服务器在请求的端口上打开了。

听起来您还想缓存翻译后的地址,这通常是有益的,但您似乎也希望将更改后的名称映射“推送”给您。 Linux 系统通常不会在操作系统级别缓存地址转换,除非您正在运行 nscd(名称服务缓存守护进程),即使如此,也无法使用 DNS 转换向应用程序推送更新。您只需偶尔重新翻译名称并查看 sockaddr 是否已更改。

如果您知道相关的名称/地址更改将来自频繁的本地 /etc/hosts 修改(极不可能出现这种情况!),您可以考虑使用 inotify 监视该文件的更新,当您看到更改时刷新本地名称缓存。

关于c - 解析主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23701512/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com