tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

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))))))