Я также все еще учусь, вот что привело меня сюда, так что, возможно, объяснение моего понимания поможет мне также учиться, так что будьте утомлены, я могу быть очень неправ, или я могу быть в правильном направлении ...
Вам это нужно, потому что адреса IPv4 и IPv6 имеют разную длину, как и адреса разных протоколов, я бы предположил, что не все протоколы, такие как Apple Talk или протоколы Ham Radio, используют адреса, похожие на адреса в стиле IPv4, которые представляют собой набор из 4 байты, октеты, я думаю, они называются, разделенные символом ".".
Поэтому, когда вы вызываете «sizeof (struct sockaddr_in)», вы передаете «int», которое представляет собой количество байтов, из которых состоит sockaddr_in, что будет отличаться от «sizeof (struct sockaddr_in6)» для sizeof (struct sockaddr_un) , sockaddr_in предназначен для inet или IPv4, * _in6 - для inet6 или IPv6, а * _un - для доменных сокетов Unix. Я считаю, что адреса сокетов доменов Unix - это пути к файлам, которые можно использовать только для локального взаимодействия процессов. Так что, во-первых, функция / метод должна знать, где находится файл сокета, например / home / user / Pictures / socket, чтобы он мог связать его с локальным портом, следовательно, с бизнесом strncopy и sun_path. Это может также относиться к сокетам inet / 6, winsocks могут отличаться. (Изучение C / C ++ в Windows было самым близким к самоубийству, которое я когда-либо имел).
int, который передается через "sizeof (struct sockaddr_un)", может использоваться для определения режима выполнения в фактическом коде реализации. если arg [2] = N сделать это, иначе, если arg [2] = M сделать это ??? Может быть ...
Если вы прочитаете руководство по сокетам, вы увидите, что в примере используется "sizeof ()", а не addrlen.
Примечание:
При достижении размера в байтах адресной структуры вашего протокола, не имеет значения, содержит ли используемая вами структура действительно полезные данные, вам просто нужен ее размер, поэтому структура создается в параметре с помощью "sizeof ()" во вновь созданной структуре возвращает int, которое вам нужно, и именно это используется в качестве аргумента для 3-го параметра.