gpt4 book ai didi

c - 需要了解getaddrinfo()返回的结构

转载 作者:太空宇宙 更新时间:2023-11-04 08:26:41 24 4
gpt4 key购买 nike

我正在尝试构建一个与 IP 版本无关的简单网络服务器。

这是我的示例代码片段

hints.ai_family = AF_UNSPEC; // AF_INET or AF_INET6 to force version
hints.ai_flags = AI_PASSIVE; // fill in my IP for me
hints.ai_socktype = SOCK_STREAM;




if ((status = getaddrinfo(NULL, "8000", &hints, &res)) != 0){
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
exit(0);
}

填充状态后,我遍历链表“res”的每个元素,直到找到一个有效条目,然后我用该结构初始化一个套接字。

我的问题是,在 getaddrinfo() 返回的链表“res”中,我是否获得了 IPv4 和 IPv6 环回地址的单独结构?在那种情况下,我是否需要创建两个套接字来分别监听和服务 IPv4 和 IPv6 环回地址?或者在“res”链表中是否有一个结构可用于创建一个套接字,该套接字“神奇地”监听 IPv4/v6 环回地址?

谢谢

最佳答案

My question is, in the linked list "res" returned by getaddrinfo(), do I get separate structures for the IPv4 and IPv6 loopback addresses?

您将获得 IPv4(AF_INET 系列)和 IPv6(AF_INET6 系列)地址的不同结果。但是,对于您的特定参数,您不应该得到带有环回地址的结果,因为您没有指定任何节点并给出了 AI_PASSIVE 提示。每个返回的结构都应该代表一个通配符地址。

And in that case, do I need to create two sockets to listen and serve the IPv4 and IPv6 loopback addresses seperately?

不,你不应该需要多个套接字。您只能在运行双栈的机器上同时获得 IPv4 和 IPv6 地址。如果您想从这样的机器上同时为 IPv4 和 IPv6 客户端提供服务(您应该这样做),那么只需确保选择一个 IPv6 地址即可。这应该适用于使用任一协议(protocol)的客户端。

Or is there a single structure in the "res" linked list which can be used to create a socket which "magically" listens on both the IPv4/v6 loopback addresses?

其中涉及一些魔法,但它是在网络和协议(protocol)级别。 IPv6 的设计预期有一个重要的过渡期,因此它具有与 IPv4 的互操作性的良好规定。

关于c - 需要了解getaddrinfo()返回的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30175806/

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