on 385dcbf help sign in
Idris-dev/samples/ST/Net/EchoSimple.idr
24 lines 850 B history raw
1import Network.Socket
2import Network
3import Control.ST
4import Control.ST.ImplicitCall
6echoServer : (ConsoleIO m, Sockets m) => (sock : Var) ->
7 ST m () [remove sock (Sock {m} Listening)]
8echoServer sock =
9 do Right new <- accept sock | Left err => do close sock; remove sock
10 Right msg <- recv new | Left err => do close sock; remove sock; remove new
11 Right ok <- send new ("You said " ++ msg)
12 | Left err => do remove new; close sock; remove sock
13 close new; remove new; echoServer sock
15startServer : (ConsoleIO m, Sockets m) => ST m () []
16startServer =
17 do Right sock <- socket Stream | Left err => pure ()
18 Right ok <- bind sock Nothing 9442 | Left err => remove sock
19 Right ok <- listen sock | Left err => remove sock
20 echoServer sock
22main : IO ()
23main = run startServer