我曾经认为inet_ntop
的第二个参数应该始终是struct in_addr
或struct in6_addr
。但后来我查了POSIX definition:
const char *inet_ntop(int af, const void *restrict src,
char *restrict dst, socklen_t size);
[...] src 参数指向一个缓冲区,如果 af 参数是AF_INET,则保存IPv4地址;如果 af,则指向IPv6地址参数是AF_INET6;地址必须是网络字节顺序。 [...]
正如您所看到的,功能原型和描述都很模糊。
这是为什么?什么是src
的允许/便携式选择?
答案 0 :(得分:1)
它是指向存储在相应标头中的IPv4或IPv6的指针 - 因此在IPv4情况下为4字节缓冲区,在IPv6情况下为16字节缓冲区。
struct in_addr
和struct in6_addr
是存储此类地址的便捷结构,但如果您愿意,可以分别使用unsigned char [4]
和unsigned char [16]
。