gpt4 book ai didi

c - 为什么在结构和套接字创建中提到套接字的地址族?

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

我的疑问是套接字程序中的行代码。地址族在 serv_addr.sin_family = AF_INET; sockaddr_in 结构中指定,但为什么我们要在 socket(AF_INET, SOCK_STREAM, 0); 套接字创建中提及相同内容.两句话中的family address是什么意思?

struct sockaddr_in serv_addr; 
listenfd = socket(AF_INET, SOCK_STREAM, 0);//here

serv_addr.sin_family = AF_INET;//and here
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

最佳答案

socket() 创建一个新套接字。它需要知道它的地址族是什么,以便它知道允许使用哪种地址,无论是 IPv4、IPv6、IPX、NetLink 等。地址族规定了其地址值的布局和格式。例如,AF_INET 只允许 IPv4 地址,而 AF_INET6 允许 IPv6 地址(如果套接字在支持该功能的平台上设置为双栈模式,则允许 IPv4 地址)。

每个 sockaddr_... 结构都有一个 family 字段。 sockaddr_... 结构可以传递给各种函数,这些函数需要知道它们作为输入接收的地址类型,并可以指定它们作为输出返回的地址类型。

sockaddr_in 结构仅特定于 IPv4 地址,其中其 sin_addr 字段将 IPv4 地址指定为网络字节顺序的 32 位整数。其他 sockaddr_... 结构并非如此。

有一个特殊的sockaddr_storage 结构,通常在编写处理多个地址族的代码时使用,尤其是在调用可以接受多个sockaddr_... 类型的函数时.

因此,不仅告诉套接字它的地址族是什么很重要,而且对于各个地址指定它们自己的类型也很重要。通常,这些值将相互匹配(双栈套接字除外)。

关于c - 为什么在结构和套接字创建中提到套接字的地址族?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29551651/

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