有similar questions可以解决这个问题,但我找不到我正在寻找的答案。
#include <netdb.h>
int getaddrinfo (const char *hostname,
const char *service,
const struct addrinfo *hints,
struct addrinfo **result) ;
Returns: 0 if OK, nonzero on error 我想知道的是,为什么我们需要在result指向的链表上迭代,即使我们定义了hints而不是NULL。我们已经知道IP(主机名)和PORT(服务)。不是吗?
如果需要迭代,您可以简单地通过考虑一个没有完整网络知识的人来举例吗?
例如,我将hints定义如下。
struct addrinfo hints;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; /* IPv4 or IPv6 */
hints.ai_socktype = SOCK_STREAM; /* TCP */
hints.ai_flags = 0;
hints.ai_protocol = 0;发布于 2019-05-14 03:58:46
在过去,在IPv6成为一种东西之前,您可以假设主机名可以合理地解析为单个IP地址。
现在情况并非如此,getaddrinfo将同时返回ipv4和ipv6地址,您真的需要同时尝试这两个地址。如果你确信你的用户将在良好的网络上,或者你的用户可以容忍长时间的延迟,那么按顺序尝试“连接”可能就足够了,但如果你需要在潜在的断开网络上快速建立连接,那么可能需要实现一个更复杂的过程(搜索“快乐眼球”)。
https://stackoverflow.com/questions/56118838
复制相似问题