Почему макросы семейств протоколов и макросы семейств адресов дублируются - PullRequest
2 голосов
/ 28 марта 2019

В битах / socket.h систем Linux макросы семейств адресов определяются в терминах макросов семейств протоколов.среди них существует взаимно-однозначное соответствие в виде

#define AF_something PF_something

Поскольку сопоставление «один к одному» между макросами AF и макросами PF кажется ненужным дублированием.

Мой вопрос: есть ли причина для этого?

1 Ответ

1 голос
/ 29 марта 2019

Первоначальной идеей было независимость семейств адресов и протоколов. Адрес может потенциально использоваться в различных протоколах. Авторы ожидали, что, например, адрес IPv4 может использоваться другим гипотетическим протоколом, отличным от IP. И наоборот - независимые семьи готовы использовать адреса нового типа в протоколе IP.

Так что единственная причина в том, что автор API сокетов хотел быть в будущем. Насколько я знаю, между PF и AF все еще есть взаимно однозначное соответствие.

Это хорошая привычка следовать оригинальной идее. Это означает наличие независимой константы и использование констант PF при работе с протоколом, например, при создании сокета: s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP), и использование константы AF при работе с адресами, например sa.sin_family = AF_INET.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...