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.

void
readc(dispatch w, file i, file o, data b)
{
    integer e;
    data t;
 
    while (1) {
        e = f_b_read(i, t, 1 << 10);
        if (e < 1) {
            if (e == -1) {
                w_resign(w, i);
            }
 
            break;
        } else {
            e = b_frame(t, '\n');
            if (e != -1) {
                e += 1;
                b_rule(b, -1, t, 0, e);
                f_data(o, b);
                w_register(w, o);
                b_ecopy(b, t, e, ~t - e);
            } else {
                b_add(b, t);
            }
        }
    }
}
 
void
serve(dispatch w, file s)
{
    file i, o;
    data b;
 
    accept(i, o, s, NONBLOCKING_INPUT | NONBLOCKING_OUTPUT);
    w.watch(i, readc, w, i, o, b);
}
 
integer
main(void)
{
    dispatch w;
    file s;
 
    tcpip_listen(s, 12321, 0);
    w.watch(s, serve, w, s);
    w.press;
 
    0;
}