对于inet_ntop,第二个参数的正确类型/格式是什么?

时间:2010-08-27 10:08:00

标签: c ip-address posix

我曾经认为inet_ntop的第二个参数应该始终是struct in_addrstruct 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的允许/便携式选择?

1 个答案:

答案 0 :(得分:1)

它是指向存储在相应标头中的IPv4或IPv6的指针 - 因此在IPv4情况下为4字节缓冲区,在IPv6情况下为16字节缓冲区。

struct in_addrstruct in6_addr是存储此类地址的便捷结构,但如果您愿意,可以分别使用unsigned char [4]unsigned char [16]