gpt4 book ai didi

c++ - 将 IP 地址从 sockaddr_in6 转换为 in_addr

转载 作者:行者123 更新时间:2023-11-28 02:34:54 24 4
gpt4 key购买 nike

下面的转换工作正常,但是当我有 IPV6 时如何处理?

sockaddr foo;
in_addr_t ip_address = ((sockaddr_in)foo).sin_addr.s_addr;

下面的代码失败了:

sockaddr foo;
in_addr_t ip_address = ((sockaddr_in6)foo).sin6_addr.s_addr;

Error 1 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'IN6_ADDR' (or there is no acceptable conversion)

sockaddr_in 转换为 in_addr 的代码在哪里?

最佳答案

对不起,没办法。 IPv6 地址无法转换为 struct in_addr,除非在它是 IPv4 映射地址时发生极端情况。

IPv6 主机地址需要 16 个字节来存储,对于主机部分,这在相同的 header 中用 struct in6_addr 覆盖。但是,此外,IPv6 地址还包含 scope 除了可能对链路本地地址至关重要的主机之外。因此,仅使用主机部分是不够的。

您应该阅读有关编程双栈或纯 IPv6 应用程序的通用手册。特别是,struct sockaddr_storage 作为两个地址的公共(public)存储,以及 getaddrinfo 函数解析名称(仅数字或 NETDB)。

关于c++ - 将 IP 地址从 sockaddr_in6 转换为 in_addr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27818202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com