2 | import Derive.Prelude
4 | import System.UV.Pointer
5 | import System.UV.Loop
6 | import System.UV.Util
7 | import System.UV.Raw.DNS
9 | %language ElabReflection
17 | record SockInfo where
23 | hints : HasIO io => SockInfo -> io (Ptr AddrInfo)
24 | hints (SI f t p) = do
25 | hs <- mallocPtr AddrInfo
26 | uv_set_ai_family hs (familyCode f)
27 | uv_set_ai_socktype hs (sockCode t)
28 | uv_set_ai_protocol hs (protocolCode p)
32 | Resource (Ptr AddrInfo) where
33 | release = uv_freeaddrinfo
36 | Resource (Ptr GetAddrInfo) where
39 | parameters {auto l : UVLoop}
40 | {auto has : Has UVError es}
43 | (Outcome es (Ptr AddrInfo) -> IO ())
48 | gaCB cb _ st pa = do
50 | Left err => uv_freeaddrinfo pa >> cb (Error err)
51 | Right () => cb (Succeeded pa)
54 | addrInfo : (node, service : String) -> SockInfo -> Async es (Ptr AddrInfo)
56 | use1 (hints h) $
\hs => do
57 | uvAsync $
\cb => uv_getaddrinfo l.loop (gaCB cb) n s hs