Create a network service that sits on TCP port 12321, which accepts connections on that port, and which echoes complete lines (using a carriage-return/line-feed sequence as line separator) back to clients. No error handling is required. For the purposes of testing, it is only necessary to support connections from localhost (127.0.0.1 or perhaps ::1). Logging of connection information to standard output is recommended.

The implementation must be able to handle simultaneous connections from multiple clients. A multi-threaded or multi-process solution may be used. Each connection must be able to echo more than a single line.

The implementation must not stop responding to other clients if one client sends a partial line or stops reading responses.

 
(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
    (`#(tcp ,conn ,data)
     (gen_tcp:send conn data))
    (`#(tcp_closed ,conn)
     (lfe_io:format "Connection closed: ~p~n" (list conn)))))
 