2011-08-01 52 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