Проверка семейства адресов в программировании сокетов - PullRequest
0 голосов
/ 28 июня 2011

что будет выводом следующего кода:

char peer_ip[16];
inet_pton(AF_INET,"127.0.0.1",peer_ip);

теперь у меня есть peer_ip в сетевой форме. Как я могу проверить, что такое адрес семьи ??? Я не могу использовать inet_ntop сейчас. Там в любом случае ?? Будет ли работать getaddrinfo в этом случае ???

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

Вы не можете - inet_pton дает вам либо struct in_addr (для AF_INET), либо struct in6_addr (для AF_INET6), в зависимости от того, какое семейство адресов вы передаете. Если вы рассматриваете эти структурычтобы быть двоичными двоичными объектами памяти, вы не сможете восстановить семейство адресов из них, вам просто нужно отслеживать тип двоичного двоичного объекта, который у вас есть.

Вы действительно должны использовать struct in_addr,не char[16] как значение, переданное в inet_pton:

struct in_addr peer_ip;
inet_pton(AF_INET, "127.0.0.1", &peer_ip);
0 голосов
/ 29 июня 2011

Вы должны подняться выше и использовать getaddrinfo вместо inet_pton (который не обрабатывает области IPv6), а вместо непрозрачных буферов используйте указатели struct sockaddr_storage и struct sockaddr, после чего вы можете сразу определить семейство с помощьюss.ss_family или sa.sa_family в зависимости от ситуации.

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