2014-11-07 2 views
10

Haskell network s HostAddress sagt "Netzwerk-Byte-Reihenfolge" in es DocumentationHaskell Netzwerk SockAddrInet welche Endianness zu verwenden?

Allerdings ist, wenn ich Adresse in Netzwerk-Byte-Reihenfolge (Big-Endian) passieren, ist es beispielsweise druckt falsche Adresse zeigen:

Prelude Network.Socket> :m + Network.Socket Data.Bits 
Prelude Network.Socket Data.Bits> SockAddrInet (fromInteger 50) (192 `shiftL` 24) 
0.0.0.192:50 
Prelude Network.Socket Data.Bits> 

Ist das erwartet? Warum druckt es die Dinge Little-Endian? Soll ich die IP-Adresse im großen oder kleinen Endian-Format übergeben?

Antwort

1

Es ist wie der gemeinsame Weg aussieht, ist IPv4-Adressen zu generieren Socket.inet_addr zu verwenden, z.B .:

do x <- inet_addr "192.0.0.0"; return $ SockAddrInet 50 x 

oder äquivalent:

inet_addr "192.0.0.0" >>= (return . SockAddrInet 50)