]> gitweb @ CieloNegro.org - haskell-dns.git/blob - Network/Socket/IsString.hs
AAAA support
[haskell-dns.git] / Network / Socket / IsString.hs
1 module Network.Socket.IsString () where
2
3 import Data.String
4 import Network.Socket
5 import System.IO.Unsafe
6
7 instance IsString HostAddress where
8     fromString str
9         = let hint = defaultHints {
10                                 addrFlags  = [AI_NUMERICHOST]
11                               , addrFamily = AF_INET
12                               }
13               ret  = unsafePerformIO $
14                      getAddrInfo (Just hint) (Just str) Nothing
15           in
16             case ret of
17               []     -> error (str ++ " seems not to be a valid IPv4 address")
18               (x:xs) -> case addrAddress x of
19                           SockAddrInet _ addr
20                               -> addr
21                           _   -> error ("getAddrInfo (" ++ str ++ ") returned a strange result: " ++ show (x:xs))
22
23 instance IsString HostAddress6 where
24     fromString str
25         = let hint = defaultHints {
26                                  addrFlags  = [AI_NUMERICHOST]
27                                , addrFamily = AF_INET6
28                                }
29               ret  = unsafePerformIO $
30                      getAddrInfo (Just hint) (Just str) Nothing
31           in
32             case ret of
33               []     -> error (str ++ " seems not to be a valid IPv6 address")
34               (x:xs) -> case addrAddress x of
35                           SockAddrInet6 _ _ addr _
36                               -> addr
37                           _   -> error ("getAddrInfo (" ++ str ++ ") returned a strange result: " ++ show (x:xs))