echoServer.tri (894B)
1 !import prelude * 2 !import io * 3 !import socket * 4 !export * 5 6 -- Main accept+echo loop. Recursion via y. 7 echoLoop = y (self : server : 8 withAccepted_ server 9 (err : 10 bind (putStrLn (append "accept error: " err)) (_ : 11 self server)) 12 (clientSock addr : 13 bind (putStrLn (append "client from " addr)) (_ : 14 onResult_ (recv clientSock 4096) 15 (err : 16 bind (closeSocket clientSock) (_ : 17 self server)) 18 (msg : 19 bind (send clientSock msg) (_ : 20 bind (closeSocket clientSock) (_ : 21 self server)))))) 22 23 main = io ( 24 onOk_ socket (server : 25 onOk_ (bindSocket server "127.0.0.1" 0) (_ : 26 onOk_ (listen server 5) (_ : 27 onOk_ (getSocketName server) (port : 28 bind (putStrLn (append "Echo server listening on port " (showNumber port))) (_ : 29 echoLoop server))))))