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