danglingpointer Asked: 2018-03-01 05:30:52 +0800 CST2018-03-01 05:30:52 +0800 CST 2018-03-01 05:30:52 +0800 CST 创建套接字文件是否需要 AF_INET? 772 关于为AF_INET. 为了AF_UNIX在同一主机内通话,我们创建套接字文件示例/tmp/name_of_the_socket_file 怎么样AF_INET,它需要创建套接字文件吗? AFAIK,我不需要创建套接字文件AF_INET,我可以与简单的客户端和服务器模型进行通信。 我的同事告诉我我需要为AF_INETIP地址作为文件名创建套接字文件,我不明白有人可以澄清我吗? tcp socket 1 个回答 Voted Best Answer user34720 2018-03-01T05:50:44+08:002018-03-01T05:50:44+08:00 我的同事告诉我我需要为AF_INET 你的同事错了。看看bind(2)你的手册页可以看到不同的套接字类型有规则: 名称绑定中使用的规则因地址族而异。有关详细信息,请参阅第 7 节中的手册条目。对于AF_INET,见ip(7);对于AF_INET6,见ipv6(7);对于AF_UNIX,见packet(7);对于AF_X25,见x25(7);对于AF_NETLINK,请参见netlink(7)。 您将看到ip(7)没有涉及AF_INET可以创建文件的调用。还有一篇很棒的IBM 论文,介绍了这种套接字结构和一些关于它的历史。遗留结构形式(BSD 4.4/Unix 98): struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; 当前结构: struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */ in_port_t sin_port; /* port in network byte order */ struct in_addr sin_addr; /* internet address */ }; /* Internet address. */ struct in_addr { uint32_t s_addr; /* address in network byte order */ }; 看,没有提到任何文件创建。 引用手册页的其他部分ip(7)关于这种 socket( AF_INET) 的工作原理: 当一个进程想要接收新的传入数据包或连接时,它应该使用 . 将套接字绑定到本地接口地址bind(2)。在这种情况下,只有一个 IP 套接字可以绑定到任何给定的本地(地址、端口)对。当INADDR_ANY在绑定调用中指定时,套接字将绑定到所有本地接口。在listen(2)未绑定的套接字上调用时,套接字会自动绑定到本地地址设置为的随机空闲端口INADDR_ANY。当 connect(2)在未绑定的套接字上调用时,套接字会自动绑定到随机空闲端口或本地地址设置为的可用共享端口INADDR_ANY。 --剪辑-- 地址格式 IP 套接字地址定义为 IP 接口 地址和 16 位端口号的组合。基本 IP 协议不提供端口号,它们由更高级别的协议实现,如 udp(7) 和 tcp(7)。在原始套接字上,sin_port 设置为 IP 协议。 但是,如果您查看unix(7)手册页,您会看到一些AF_UNIX套接字类型及其基本结构的示例。甚至还有一个称为sun_path套接字文件路径的字段(请参阅下面的相关资料): #define UNIX_PATH_MAX 108 struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX */ char sun_path[UNIX_PATH_MAX]; /* pathname */ }; tl,dr: AF_UNIX用于套接字(它们使用文件),而AF_INET用于绑定到 IP 地址,并以各种形式(单播、多播、广播......)创建通信。 相关资料: 解释 unix 域套接字的示例 - AF_INET 与 AF_UNIX 为什么套接字路径长度限制为一百个字符?
你的同事错了。看看
bind(2)
你的手册页可以看到不同的套接字类型有规则:您将看到
ip(7)
没有涉及AF_INET
可以创建文件的调用。还有一篇很棒的IBM 论文,介绍了这种套接字结构和一些关于它的历史。遗留结构形式(BSD 4.4/Unix 98):当前结构:
看,没有提到任何文件创建。
引用手册页的其他部分
ip(7)
关于这种 socket(AF_INET
) 的工作原理:--剪辑--
但是,如果您查看
unix(7)
手册页,您会看到一些AF_UNIX
套接字类型及其基本结构的示例。甚至还有一个称为sun_path
套接字文件路径的字段(请参阅下面的相关资料):tl,dr:
AF_UNIX
用于套接字(它们使用文件),而AF_INET
用于绑定到 IP 地址,并以各种形式(单播、多播、广播......)创建通信。相关资料: