Echo server: Difference between revisions
Content added Content deleted
(Nimrod -> Nim) |
(Add LFE version of echo server based on the Erlang version) |
||
Line 1,129: | Line 1,129: | ||
server.listen(12321, "localhost");</lang> |
server.listen(12321, "localhost");</lang> |
||
=={{header|LFE}}== |
|||
<lang lisp> |
|||
;;; |
|||
;;; This is a straight port from the Erlang version. |
|||
;;; |
|||
;;; You can run this in the LFE REPL by slurping the file: |
|||
;;; |
|||
;;; > (slurp "echo_server.lfe") |
|||
;;; > (start) |
|||
;;; |
|||
(defmodule echo |
|||
(export (start 0))) |
|||
(defun start () |
|||
(spawn (lambda () |
|||
(let ((`#(ok ,socket) (gen_tcp:listen 12321 `(#(packet line))))) |
|||
(echo-loop socket))))) |
|||
(defun echo-loop (socket) |
|||
(let* ((`#(ok ,conn) (gen_tcp:accept socket)) |
|||
(handler (spawn (lambda () (handle conn))))) |
|||
(lfe_io:format "Got connection: ~p~n" (list conn)) |
|||
(gen_tcp:controlling_process conn handler) |
|||
(echo-loop socket))) |
|||
(defun handle (conn) |
|||
(receive |
|||
((tuple 'tcp conn data) |
|||
(gen_tcp:send conn data)) |
|||
((tuple 'tcp_closed conn) |
|||
(lfe_io:format "Connection closed: ~p~n" (list conn))))) |
|||
</lang> |
|||
=={{header|Nim}}== |
=={{header|Nim}}== |