在" network"中处理原始IP地址关于字节顺序的混淆

时间:2016-06-24 14:04:58

标签: haskell networking ip-address endianness

network包中HostAddressHostAddress6的文档说:

-- | Network byte order.
type HostAddress = Word32

-- | Host byte order.
type HostAddress6 = (Word32, Word32, Word32, Word32)

这个字节顺序实际意味着什么?毕竟,Word32应该是一个独立于主机endianness的数字,只有当(de)序列化时,字节序才有意义。

我的目标是使用IPv4或IPv6地址来构建正确的SockAddr值。

对于HostAddress,似乎在小端架构上翻转了字节顺序,因为show $ SockAddrInet 0 0x0100007f给出了"127.0.0.1:0"。并show $ SockAddrInet6 0 0 (0,0,0,1) 0给出"[::1]:0所以字节顺序似乎正确。但目前我还没有机会在大端架构上进行测试。

1 个答案:

答案 0 :(得分:1)

Data.IP模块看起来像是解决了这个问题。

看看:

以及创建IPv4和IPv6值的各种方法。