在 "network" 中操纵原始 IP 地址并混淆字节顺序

Manipulating raw IP addresses in "network" and confusion about byte order

network 包中 HostAddressHostAddress6 的文档说:

-- | Network byte order.
type HostAddress = Word32

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

这个字节顺序到底是什么意思?毕竟,Word32 应该是一个独立于主机 endianness 的数字,字节顺序应该只在(反)序列化时才重要。

我的目标是给定一个 IPv4 或 IPv6 地址来构建正确的 SockAddr 值。

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

Data.IP 模块似乎解决了这个问题。

看看:

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