将文本主机地址转换为数字地址

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))

哪一个是正确的?如果所有这些都是正确的,为什么每个都将转换后的网络地址存储到完全不同的数据结构中?

最佳答案

它的结构相同:svaddr.sin6_addrstruct 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

08-04 15:28