0 | module IO.Async.Socket
2 | import public IO.Async.Posix
3 | import public System.Posix.Socket
7 | parameters {auto has : Has Errno es}
16 | socketnb : (d : Domain) -> SockType -> Async e es (Socket d)
19 | addFlags sock O_NONBLOCK
24 | acceptnb : Socket d -> Async e es (Socket d)
26 | assert_total $
attempt (accept {es = [Errno]} sock) >>= \case
27 | Right peer => pure peer
29 | if x == EINPROGRESS || x == EAGAIN
30 | then ignore (poll sock POLLIN) >> acceptnb sock
35 | connectnb : {d : _} -> Socket d -> Addr d -> Async e es ()
36 | connectnb sock addr =
37 | attempt (connect {es = [Errno]} sock addr) >>= \case
39 | if x == EINPROGRESS || x == EAGAIN
40 | then ignore $
poll sock POLLOUT
49 | -> {auto frb : FromBuf r}
52 | -> Async e es (ReadRes r)
53 | recvnb sock r n fs = do
54 | _ <- poll sock POLLIN