在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/