2014-11-07 1 views
10

Haskell network s HostAddress dice "ordine di byte di rete" nella sua DocumentationRete Haskell SockAddrInet quale endianness usare?

Tuttavia, se mi passate l'indirizzo in ordine di byte di rete (big-endian), è mostrare stampe esempio indirizzo sbagliato:

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> 

Is questo previsto? Perché sta stampando le cose little-endian? Devo passare l'indirizzo IP in formato big o little endian?

risposta

1

Sembra che il modo comune per generare indirizzi IPv4 è quello di utilizzare Socket.inet_addr, ad es .:

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

o, equivalentemente:

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