Документация для HostAddress
и HostAddress6
из сетевой пакет говорит:
-- | Network byte order.
type HostAddress = Word32
-- | Host byte order.
type HostAddress6 = (Word32, Word32, Word32, Word32)
Что на самом деле означает этот порядок байтов? В конце концов, Word32
должен быть числом, независимым от порядка байтов хоста, порядок следования байтов должен иметь значение только тогда, когда (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
, так что вроде порядок байтов правильный. Но в настоящее время у меня нет возможности протестировать его на архитектуре с прямым порядком байтов.
htons, htoni,...
, которые искажают биты для преобразования из хост-порядка байтов в сетевой порядок байтов. Они должны были бытьnewtype
s, ИМО. (Кроме того, мне очень не нравятся библиотеки, которые объявляют себя полуобщественными. Внутренние модули должны быть непрозрачными.) - person chi   schedule 24.06.2016