2012-05-18 60 views
4

在哈斯克爾network哈斯克爾綁定套接字到特定的IP

bindSocket使用HostAddressHostAddress6

因爲其定義:

-- | Network byte order. 
type HostAddress = Word32 

-- | Host byte order. 
type HostAddress6 = (Word32, Word32, Word32, Word32) 
  • 如何從123.123.123.123Word32
  • 如何從IPv6字符串轉到(Word32, Word32, Word32, Word32)
  • Endianness在不同的操作系統(Windows,Linux,OS X,FreeBSD)上發揮作用嗎?
+1

它看起來像[網絡地址](http://hackage.haskell.org/package/network-address)軟件包可以解決這些轉換中的一些問題。 –

+0

@DanielWagner'network-address'('readpIPv4',0.1.0.0 - > 65535)與'Network.BSD'('getHostByName',0.1.0.0 - > 256)不一致。我也不喜歡它是多麼羅嗦。我想用它的應用程序本身就是378行。 –

回答

2

使用getAddrInfo

getAddrInfo :: Maybe AddrInfo -> Maybe HostName -> Maybe ServiceName -> IO [AddrInfo] 

解析的主機或服務的名稱,以一個或多個地址。此函數返回的AddrInfo值包含可以直接傳遞給connect或bindSocket的SockAddr值。

該函數是獨立於協議的。它可以返回IPv4和IPv6地址信息。

+0

'Prelude Network.Socket> getAddrInfo Nothing(只是「127.0.0.1」)Nothing' '***例外:getAddrInfo:不存在(錯誤10093)' –

+0

對不起,錯誤是由於我忘記'withSocketsDo'。這似乎與各種IP地址字符串真正跨平臺的方式與許多額外的信息:) –