gpt4 book ai didi

c - 关于 c 中的 ,​​,addrinfo"的一些信息?

转载 作者:行者123 更新时间:2023-11-30 21:08:06 25 4
gpt4 key购买 nike

我想知道是否有人知道 struct addrinfo 是在哪里定义的(头文件?)。它似乎用于套接字编程,但我从未看到它被声明。我只看到像 struct addrinfo *head; 这样的东西随机使用但 addrinfo 从未声明。

然后,其中(addrinfo 中)有一个数据类型 'socklen_t' 。这是一种数据类型还是它到底是什么?

里面还有struct addrinfo *ai_next这让我想知道:那有什么用呢?根据我的理解,addrinfo 存储有关如何与另一个套接字连接的信息以及 struct sockaddr *ai_addr存储想要连接的确切地址(即 IP 号和 TCP/IP 情况下的端口号)。话虽如此,我不应该只需要一个 addrinfo 结构,即存储我所需的连接数据的结构吗?为什么还有更多?

那么: getaddrinfo 的最后一个参数是什么?关于?它叫struct addrinfo **res但我不知道那可能是什么。

请允许我最后一个,这对你们来说可能很容易:

struct addrinfo hints = {
.ai_flags = AI_ADDRCONFIG,
.ai_socktype = SOCK_STREAM,
.ai_family = PF_UNSPEC
};

我说的对吗,提示是 addrinfo 类型的另一个结构和符号:

.ai_flags = AI_ADDRCONFIG,

实际上是缩写:

struct addrinfo hints;
hints.ai_flags = AI....

伙计们,让我读一下你们所知道的!爱并尊重你们所有人

最佳答案

addrinfo 结构如下所示:

struct addrinfo {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
socklen_t ai_addrlen;
struct sockaddr *ai_addr;
char *ai_canonname;
struct addrinfo *ai_next;
};

来源:http://man7.org/linux/man-pages/man3/getaddrinfo.3.html

socklen_t 是 int 的 typedef。

typedef _U32_TYPE int;
...
typedef socklen_t _U32_TYPE;

来源:https://fossies.org/dox/glibc-2.24/bits_2types_8h.html

ai_next 用于创建链接列表。我不太清楚如何使用这一结构,但我认为您可能想要连接到多个套接字,而不仅仅是一个。

The getaddrinfo() function allocates and initializes a linked list of addrinfo structures, one for each network address that matches node and service, subject to any restrictions imposed by hints, and returns a pointer to the start of the list in res.

因此,在调用 getaddrinfo() 后,*res 将成为链接列表的第一个元素。

最后,我不确定你的语法是否正确,但这个是正确的:

struct addrinfo hints = {
.ai_flags = AI_ADDRCONFIG,
.ai_socktype = SOCK_STREAM,
.ai_family = PF_UNSPEC
};

当你这样做时,你直接初始化这些成员,而当你这样做时:

struct addrinfo hints;
hints.ai_flags = AI_ADDRCONFIG;
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = PF_UNSPEC;

您创建结构(其中填充了未定义的内容)并初始化成员。

所以结果是相同的,但内存中的行为有点不同。

关于c - 关于 c 中的 ,​​,addrinfo"的一些信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40344535/

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