【问题标题】:Can I have an address family independent network packet struct?我可以有一个地址族独立的网络数据包结构吗?
【发布时间】:2010-08-11 09:27:54
【问题描述】:

我正在向网络应用程序添加 IPv6 支持。一些控制数据包应该包含 IPv4 和 IPv6 地址的混合列表(当前代码仅支持 IPv4):

struct control_packet {
    [...]
    ushort          ip1_afi;
    struct in_addr  ip1;
    ushort          ip2_afi;
    struct in_addr  ip2;
    uchar           reserved1;
    uchar           prefix_mask_len;
    ushort          prefix_afi;
    struct in_addr  prefix;
} __attribute__ ((__packed__));

我应该如何替换 in_addr 结构以支持 IPv4 和 IPv6,之前依赖 AFI 值?

我认为我不能为此使用sockaddr_storage,因为它为数据包预留了比所需空间更多的空间。

我见过有人使用uchar ip1[0],但是我可能不得不手动组装数据包,而不是使用结构。有什么建议吗?

我也接受好的 RTFM 链接 :)

谢谢!

【问题讨论】:

    标签: c networking network-programming struct


    【解决方案1】:

    您可以简单地使用struct in_addrstruct in6_addr 中的union 来代替您现在拥有的struct in_addr

    【讨论】:

      【解决方案2】:

      在我看来,基本上sockaddr 结构已经实现了相同的思路; sa_family 成员告诉这是 ip4 还是 ip6。

      我会选择将您的 afiin_addr 字段粘合到一个适当的 ip[46] 地址抽象的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-24
        • 2021-11-04
        • 2015-09-06
        • 2016-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多