为什么协议族宏和地址族宏重复

时间:2019-03-28 09:04:46

标签: linux sockets

在Linux系统的bits / socket.h中,地址族宏是根据协议族宏定义的。它们之间以

的形式一对一对应
#define AF_something PF_something

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

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

1 个答案:

答案 0 :(得分:1)

最初的想法是使地址和协议系列独立。地址可能会在各种协议中使用。作者期望,例如IPv4地址可以被不同于IP的另一种假设协议使用。反之亦然-独立家族准备在IP协议中使用一种新型地址。

因此,唯一的原因是套接字API的作者希望成为未来的证明。据我所知,PF和AF之间仍然存在一对一的映射。

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