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.

# How to handle an incoming new connection
proc acceptEcho {chan host port} {
    puts "opened connection from $host:$port"
    fconfigure $chan -blocking 0 -buffering line -translation crlf
    fileevent $chan readable [list echo $chan $host $port]
}
 
# How to handle an incoming message on a connection
proc echo {chan host port} {
    if {[gets $chan line] >= 0} {
        puts $chan $line
    } elseif {[eof $chan]} {
        close $chan
        puts "closed connection from $host:$port"
    }
    # Other conditions causing a short read need no action
}
 
# Make the server socket and wait for connections
socket -server acceptEcho -myaddr localhost 12321
vwait forever