gpt4 book ai didi

c - 套接字编程中struct addrinfo {}中链接列表的用途

转载 作者:行者123 更新时间:2023-12-02 07:30:54 25 4
gpt4 key购买 nike

我正在读Beejs' Guide to Network Programming

我在理解链表的目的(即此结构中的最终参数)时遇到困难:

struct addrinfo {
int ai_flags; // AI_PASSIVE, AI_CANONNAME, etc.
int ai_family; // AF_INET, AF_INET6, AF_UNSPEC
int ai_socktype; // SOCK_STREAM, SOCK_DGRAM
int ai_protocol; // use 0 for "any"
size_t ai_addrlen; // size of ai_addr in bytes
struct sockaddr *ai_addr; // struct sockaddr_in or _in6
char *ai_canonname; // full canonical hostname

struct addrinfo *ai_next; // linked list, next node
};

这有什么需要?下一个节点意味着下一个客户端还是什么?

最佳答案

一台主机可以有多个IP地址。例如,IPv4和IPv6地址,或
多个IPv4地址。因此,getaddrinfo()为您提供了指向链接的指针
一个或多个addrinfo结构的列表,而ai_next是指向
下一个元素,或列表中最后一个元素的NULL

示例(打印主机的所有IP地址):

struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
hints.ai_protocol = IPPROTO_TCP;
struct addrinfo *addrs, *addr;

getaddrinfo("www.google.com", NULL, &hints, &addrs);
// addrs points to first addrinfo structure.

// Traverse the linked list:
for (addr = addrs; addr != NULL; addr = addr->ai_next) {

char host[NI_MAXHOST];
getnameinfo(addr->ai_addr, addr->ai_addrlen, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
printf("%s\n", host);

}
freeaddrinfo(addrs);

(为简便起见,省略了错误检查。)

关于c - 套接字编程中struct addrinfo {}中链接列表的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21797913/

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