29 lines
950 B
Plaintext
29 lines
950 B
Plaintext
!import "../../lib/base.tri" !Local
|
|
!import "../../lib/io.tri" !Local
|
|
!import "../../lib/socket.tri" !Local
|
|
|
|
-- Main accept+echo loop. Recursion via y.
|
|
echoLoop = y (self : server :
|
|
withAccepted_ server
|
|
(err :
|
|
bind (putStrLn (append "accept error: " err)) (_ :
|
|
self server))
|
|
(clientSock addr :
|
|
bind (putStrLn (append "client from " addr)) (_ :
|
|
onResult_ (recv clientSock 4096)
|
|
(err :
|
|
bind (closeSocket clientSock) (_ :
|
|
self server))
|
|
(msg :
|
|
bind (send clientSock msg) (_ :
|
|
bind (closeSocket clientSock) (_ :
|
|
self server))))))
|
|
|
|
main = io (
|
|
onOk_ socket (server :
|
|
onOk_ (bindSocket server "127.0.0.1" 0) (_ :
|
|
onOk_ (listen server 5) (_ :
|
|
onOk_ (getSocketName server) (port :
|
|
bind (putStrLn (append "Echo server listening on port " (showNumber port))) (_ :
|
|
echoLoop server))))))
|