RosettaCodeData/Task/Echo-server/Oz/echo-server-1.oz

37 lines
863 B
Plaintext

declare
ServerSocket = {New Open.socket init}
proc {Echo Socket}
case {Socket getS($)} of false then skip
[] Line then
{System.showInfo "Received line: "#Line}
{Socket write(vs:Line#"\n")}
{Echo Socket}
end
end
class TextSocket from Open.socket Open.text end
in
{ServerSocket bind(takePort:12321)}
{System.showInfo "Socket bound."}
{ServerSocket listen}
{System.showInfo "Started listening."}
for do
ClientHost ClientPort
ClientSocket = {ServerSocket accept(accepted:$
acceptClass:TextSocket
host:?ClientHost
port:?ClientPort
)}
in
{System.showInfo "Connection accepted from "#ClientHost#":"#ClientPort#"."}
thread
{Echo ClientSocket}
{System.showInfo "Connection lost: "#ClientHost#":"#ClientPort#"."}
{ClientSocket close}
end
end