linux - 为什么协议(protocol)族宏和地址族宏是重复的

标签 linux sockets

在Linux系统的bits/socket.h中,地址族宏是根据协议(protocol)族宏来定义的。它们之间是一一对应的,形式为

#define AF_something PF_something

由于 AF 宏和 PF 宏之间的一对一映射,它们似乎是不必要的重复。

我的问题是:这有什么原因吗?

最佳答案

最初的想法是让地址和协议(protocol)族独立。地址可以潜在地用于各种协议(protocol)。作者预计,例如 IPv4 地址可以被不同于 IP 的另一个假设协议(protocol)使用。反之亦然 - 独立家庭准备在 IP 协议(protocol)中使用一种新的地址。

所以唯一的原因是套接字 API 的作者想要面向 future 。据我所知,PF和AF之间仍然存在一对一的映射。

遵循最初的想法是一个好习惯。这意味着在使用协议(protocol)时使用独立常量并使用 PF 常量,例如创建套接字:s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) 并在使用地址时使用 AF 常量,例如 sa。 sin_family = AF_INET.

关于linux - 为什么协议(protocol)族宏和地址族宏是重复的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55393683/

相关文章:

php - 如何在 AWS linux 服务器上安装 ejabberd?

linux - 我如何在 Linux 上强制为 SAN 分配次要号码?

c++ - 如何设置QXmlStreamReader atStart?

c - 通过套接字发送二进制文件

android - 在客户端搜索服务器 IP 而不是输入

linux - 如何在服务器关闭前刷新所有 ssh 服务器数据?

linux - 在 Ubuntu 64 上运行 ELF 64 位 LSB 可执行文件

c - 读取 TCP 套接字中的 buff

java - DataInputStream.read() 与 DataInputStream.readFully()

java - 为什么没有服务器端套接字?