Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么协议族宏和地址族宏是重复的_Linux_Sockets - Fatal编程技术网

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

Linux 为什么协议族宏和地址族宏是重复的,linux,sockets,Linux,Sockets,在Linux系统的bits/socket.h中,地址族宏是根据协议族宏定义的。它们之间有一对一的对应关系,形式为 #define AF_something PF_something 由于AF宏和PF宏之间的一一对应关系,它们看起来像是不必要的重复 我的问题是:这有什么原因吗?最初的想法是让地址和协议族独立。地址可能用于各种协议中。例如,作者期望IPv4地址可以被另一个不同于IP的假设协议使用。反之亦然——独立的家庭准备在IP协议中使用一种新的地址 所以,唯一的原因是socket API的作者希

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

#define AF_something PF_something
由于AF宏和PF宏之间的一一对应关系,它们看起来像是不必要的重复


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

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

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


遵循最初的想法是一个好习惯。这意味着在使用协议时使用独立常量和PF常量,例如创建套接字:
s=socket(PF\u INET,SOCK\u STREAM,IPPROTO\u TCP)
并在使用地址时使用AF常量,例如
sa.sinu family=AF\u INET
,这是一个错误。这两组常量都是由IANA分配的,它们恰好具有这种映射,但IANA并没有任何东西可以证明定义一组常量是正确的。