C反应蛋白46:为什么 INET6_ADDRSTRLEN在C中定义为 46

以下程序及其输出显示INET_ADDRSTRLEN定义为16INET6_ADDRSTRLEN定义为46

这里是程序。

#include <stdio.h>
#include <arpa/inet.h>
int main()
{
    printf("%d\n", INET_ADDRSTRLEN);
    printf("%d\n", INET6_ADDRSTRLEN);
    return 0;
}

这里是输出。

16
46

我能理解为什么INET_ADDRSTRLEN需要是16。IPv4 地址的最大可能的字符串表示消耗 15 个字节,例如"255.255.255.255"。因此需要 16 个字节来存储这样的 IP地址及其终止空字符。

但是为什么INET6_ADDRSTRLEN必须是46?IPv6 地址的最大可能的字符串表示仅消耗 39 个字节(根据我的知识),例如"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"。因此,只需要 40 个字节来存储这样的 IP地址及其终止空字符。

是否有可以消耗 46 个字节的 IPv6 地址的字符串表示?

60

为什么 INET6_ADDRSTRLEN 在 C 中定义为 46?

因为POSIX将其定义为 46:

INET6_ADDRSTRLEN
46.IPv6 的字符串形式的长度。

虽然你是对的,longtest IPv6 地址需要 39 字节,与 IPv4 隧道,最长的形式可以是 45 字节:

ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255

第 46 个字节是终止的 nul 字节(在 C 字符串中)。这解释了它是如何成为 46 的。

8

这可能是为 IPv4 映射形式的地址的形式:

ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255

Read more:

Wireshark-dev mailing list RFC 4291 section 2.2

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(792)
Rna反转录成cdna原理:如何在Python中将DNA序列列表转录为 RNA
上一篇
提供小程序开发:图像与 Imagick驱动程序调整为小图像提供大文件大小
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(25条)