在 "network" 中操纵原始 IP 地址并混淆字节顺序
Manipulating raw IP addresses in "network" and confusion about byte order
network 包中 HostAddress
和 HostAddress6
的文档说:
-- | 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 值的各种方法。
network 包中 HostAddress
和 HostAddress6
的文档说:
-- | 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 值的各种方法。