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.

$ include "seed7_05.s7i";
  include "socket.s7i";
  include "listener.s7i";
 
const proc: main is func
  local
    var listener: aListener is listener.value;
    var file: existingConnection is STD_NULL;
    var file: newConnection is STD_NULL;
  begin
    aListener := openInetListener(12321);
    listen(aListener, 10);
    while TRUE do
      waitForRequest(aListener, existingConnection, newConnection);
      if existingConnection <> STD_NULL then
        if eof(existingConnection) then
          writeln("Close connection " <& numericAddress(address(existingConnection)) <&
                  " port " <& port(existingConnection));
          close(existingConnection);
        else
          write(existingConnection, gets(existingConnection, 1024));
        end if;
      end if;
      if newConnection <> STD_NULL then
        writeln("New connection " <& numericAddress(address(newConnection)) <&
                " port " <& port(newConnection));
      end if;
    end while;
  end func;