tricu

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

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