Я также все еще учусь, это то, что привело меня сюда, поэтому, возможно, объяснение моего понимания поможет мне учиться, так что будьте утомлены, я могу быть очень неправ, или я могу быть в правильном направлении...
Вам это нужно, потому что адреса 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, винсоки могут отличаться. (Изучение C/C++ в Windows было самым близким к самоубийству, которое я когда-либо испытывал).
Целое число, которое передается через «sizeof(struct sockaddr_un)», может использоваться для определения режима выполнения в фактическом коде реализации. если arg[2] = N, сделайте это;иначе, если arg[2] = M, сделайте это???Может быть...
Если вы прочтете руководство по сокетам, то увидите, что в примере используется «sizeof()», а не addrlen.
Примечание. При достижении размера в байтах адресной структуры вашего протокола не имеет значения, действительно ли структура, которую вы используете, содержит полезные данные, вам просто нужен ее размер, поэтому структура создается в параметре, используя «sizeof ( )" во вновь созданной структуре возвращает нужный вам тип int, и это то, что используется в качестве аргумента для третьего параметра.
person
Overloaded_Operator
schedule
23.12.2013