C ++ Linux Bind Socket с символом [14] - PullRequest
0 голосов
/ 03 января 2019

Я действительно новичок в C ++, поэтому этот вопрос может быть абсолютно глупым.

В документации по linux для программирования сокетов я нашел следующее:

 struct sockaddr {
       a_family_t sa_family;
       char       sa_data[14];

 };

Но, когда я пишу sockaddr address = {AF_INET, strAddress}; GCC возвращает мне ошибку:

массив должен быть инициализирован инициализатором в скобках

И что я не понимаюв том, что если я напишу

sockaddr address = {AF_INET, "AN_AARRAY_OF_CHAR"};

, это сработает и не вернет ошибку.

Итак, в чем разница между "THIS ARRAY" и char test[]="THIS ARRAY"?

А как я могу устранить ошибку, которая мне возвращается?

1 Ответ

0 голосов
/ 03 января 2019

sockaddr - это общий дескриптор для любой операции с сокетом.char sa_data[14] - это просто заполнитель для данных о семье.Вы не должны использовать sockaddr напрямую.

Каждое семейство адресов сокетов имеет свой собственный тип sockaddr_... struct.

Для семейства адресов AF_INET необходимо использоватьsockaddr_in, структура, специфичная для связи на основе IPv4.

Для семейства адресов AF_INET6 необходимо использовать sockaddr_in6, структуру, специфичную для связи на основе IPv6.

Ии т. д.

Вы должны использовать соответствующую структуру sockaddr_... для семейства адресов, с которым вы работаете, и приводить его адрес к sockaddr* при передаче его функции сокета, которая принимает общий параметр sockaddr*.

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