2011-08-01 49 views
0

转换文本主机地址的数字地址使用inet_pton存储在“”结构in6_addr“”或“结构in6_addr.sin6_addr”计算网络地址

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

它是相同的结构: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