首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要迭代getaddrinfo()吗?

我需要迭代getaddrinfo()吗?
EN

Stack Overflow用户
提问于 2019-05-14 03:35:04
回答 1查看 266关注 0票数 0

similar questions可以解决这个问题,但我找不到我正在寻找的答案。

代码语言:javascript
复制
#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定义如下。

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2019-05-14 03:58:46

在过去,在IPv6成为一种东西之前,您可以假设主机名可以合理地解析为单个IP地址。

现在情况并非如此,getaddrinfo将同时返回ipv4和ipv6地址,您真的需要同时尝试这两个地址。如果你确信你的用户将在良好的网络上,或者你的用户可以容忍长时间的延迟,那么按顺序尝试“连接”可能就足够了,但如果你需要在潜在的断开网络上快速建立连接,那么可能需要实现一个更复杂的过程(搜索“快乐眼球”)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56118838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档