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;
}
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;
}
if(eof) {
if(bytes)
error(0, "S%x unterminated line", c->tag);
- c->r = 0;
return ev_writer_close(c->w);
}
return 0;