X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/75d64210316e5f0e607eecf9abec4dea8151bb2c..38b8221fb0125d2c668611f75a9e03cf8ccc54f5:/server/server.c diff --git a/server/server.c b/server/server.c index 4b71e4e..6bfee6b 100644 --- a/server/server.c +++ b/server/server.c @@ -109,14 +109,21 @@ static int writer_error(ev_source attribute((unused)) *ev, struct conn *c = u; D(("server writer_error %d", errno_value)); + info("writer_error S%x %d", c->tag, errno_value); if(errno_value == 0) { /* writer is done */ error(errno_value, "S%x writer completed", c->tag); /* TODO */ } else { if(errno_value != EPIPE) error(errno_value, "S%x write error on socket", c->tag); - ev_reader_cancel(c->r); + if(c->r) { + info("cancel reader"); + ev_reader_cancel(c->r); + c->r = 0; + } + info("done cancel reader"); } + c->w = 0; ev_report(ev); return 0; } @@ -127,8 +134,12 @@ static int reader_error(ev_source attribute((unused)) *ev, struct conn *c = u; D(("server reader_error %d", errno_value)); - error(errno, "S%x read error on socket", c->tag); - ev_writer_close(c->w); + info("reader_error S%x %d", c->tag, errno_value); + error(errno_value, "S%x read error on socket", c->tag); + if(c->w) + ev_writer_close(c->w); + c->w = 0; + c->r = 0; ev_report(ev); return 0; } @@ -1082,7 +1093,6 @@ static int reader_callback(ev_source attribute((unused)) *ev, if(eof) { if(bytes) error(0, "S%x unterminated line", c->tag); - c->r = 0; return ev_writer_close(c->w); } return 0;