Ответ 1
Похоже, что общий способ генерации IPv4-адресов - использовать Socket.inet_addr
, например:
do x <- inet_addr "192.0.0.0"; return $ SockAddrInet 50 x
Или, что эквивалентно:
inet_addr "192.0.0.0" >>= (return . SockAddrInet 50)
Haskell network
HostAddress
говорит о "сетевом порядке байта" в нем Документация
Однако, если я передаю адрес в сетевом порядке байтов (big-endian), он показывает, что экземпляр печатает неправильный адрес:
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>
Ожидается ли это? Почему это печатает вещи мало-endian? Должен ли я передавать IP-адрес в формате большого или меньшего размера?
Похоже, что общий способ генерации IPv4-адресов - использовать Socket.inet_addr
, например:
do x <- inet_addr "192.0.0.0"; return $ SockAddrInet 50 x
Или, что эквивалентно:
inet_addr "192.0.0.0" >>= (return . SockAddrInet 50)