我試圖將一個域名解析爲一個ipv4地址。爲什麼linux的IPv4地址需要16個字節而不是4個
下面是我在做
addrinfo hints, *results;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
int error = getaddrinfo("google.com", 0, &hints, &results);
for(addrinfo* info = results; info; info = info->ai_next)
{
std::cout << (info->ai_family == AF_INET6 ? "ip6" : "ip4")
<< '[' << info->ai_addrlen << "]: ";
for(uint i = 0; i < info->ai_addrlen; ++i)
std::cout << int(((uint8_t*)info->ai_addr)[i]) << ' ';
std::cout << std::endl;
}
freeaddrinfo(results);
什麼,當我運行它,它打印的最小碼:
ip4[16]: 2 0 0 0 216 58 208 238 0 0 0 0 0 0 0 0
ip4[16]: 2 0 0 0 216 58 208 238 0 0 0 0 0 0 0 0
ip4[16]: 2 0 0 0 216 58 208 238 0 0 0 0 0 0 0 0
google.com的實際IP是216.58.208.238
。因此,出於某種原因,對於ip v4,ai_addr包含16個字節,實際存儲地址的字節數爲4到8.
我的問題是:其他12個字節是什麼?
我看了the docs,並在google上搜索了一下,但在addr_len
上找不到任何東西。還請注意,我沒有設置AI_V4MAPPED
標誌。
我認爲這是相關的:http://stackoverflow.com/questions/15608707/why-is-zero-padding-needed-in-sockaddr-in –