【问题标题】:Why protocol families macros and address families macros are duplicated为什么协议族宏和地址族宏是重复的
【发布时间】:2019-03-29 19:48:36
【问题描述】:

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

#define AF_something PF_something

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

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

【问题讨论】:

  • 恕我直言,这是一个错误。两组常量都由 IANA 分配,并且它们碰巧具有这种映射,但 IANA 没有任何理由可以证明根据另一组定义一组常量是合理的。

标签: linux sockets


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多