используйте inet_pton для хранения вычисленного сетевого адреса в «struct in6_addr» или «struct in6_addr.sin6_addr» - PullRequest
0 голосов
/ 01 августа 2011

Преобразование текстового адреса хоста в числовой адрес

int inet_pton( int af, const char * src, void * dst );

Я видел два различных использования этой функции следующим образом:

Пример 1:

http://man7.org/tlpi/code/online/book/sockets/i6d_ucase_cl.c.html

struct sockaddr_in6 svaddr;
...
inet_pton(AF_INET6, argv[1], &svaddr.sin6_addr)

Пример 2:

http://www.qnx.com/developers/docs/6.4.1/neutrino/lib_ref/i/inet_pton.html

struct in6_addr in6addr;
...
inet_pton(AF_INET6, IN6ADDR, &in6addr))

Какой из них правильный?Если все они верны, почему каждый из них сохраняет преобразованный сетевой адрес в совершенно другую структуру данных?

1 Ответ

1 голос
/ 01 августа 2011

Это та же структура: svaddr.sin6_addr имеет тип struct in6_addr.

netinet/in.h

Заголовок должен определять структуру sockaddr_in6,который должен включать по крайней мере следующих членов:

...
struct in6_addr  sin6_addr      IPv6 address.

Фактически, все, что имеет достаточный размер, подойдет, как inet_pton:

int inet_pton(int af, const char *restrict src, void *restrict dst);
                                                ^ anything
...