【问题标题】:What it the correct type/format for second argument for inet_ntop?inet_ntop 的第二个参数的正确类型/格式是什么?
【发布时间】:2011-04-04 17:34:23
【问题描述】:

我曾经认为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);

[...] 如果 af 参数是 AF_INET,src 参数指向一个保存 IPv4 地址的缓冲区,如果 af 参数是一个 IPv6 地址,则该参数指向一个缓冲区。 参数是 AF_INET6;地址必须按网络字节顺序排列。 [...]

如您所见,函数原型和描述都很模糊。

这是为什么? src 有哪些允许/可移植的选择?

【问题讨论】:

    标签: c ip-address posix


    【解决方案1】:

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

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

    【讨论】:

    • 在这种情况下,struct in_addrstruct in6_addr 仅在 IP 地址是第一个成员时才有效。这是 POSIX 要求吗?我找不到这方面的参考。
    • @schot:这是一个很好的观点 - 我想这在技术上意味着您需要传递这些结构的 s_addr 和/或 s6_addr 成员的地址。
    • 感谢您的回答,我将使用in_addr_t uint8_t [16]s(6)_addr 成员的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多