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; }