52 lines
868 B
Plaintext
52 lines
868 B
Plaintext
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;
|
|
}
|