// The peer has aborted our connection.
set_state(c, CLOSED);
errno = ECONNRESET;
+ buffer_clear(&c->sndbuf);
+ buffer_clear(&c->rcvbuf);
if(c->recv) {
c->recv(c, NULL, 0);
return false;
}
+ buffer_clear(&c->sndbuf);
+ buffer_clear(&c->rcvbuf);
+
c->recv = NULL;
c->poll = NULL;
hdr.ack = c->rcv.nxt;
hdr.wnd = 0;
hdr.ctl = RST;
+ hdr.aux = 0;
print_packet(c, "send", &hdr, sizeof(hdr));
c->utcp->send(c->utcp, &hdr, sizeof(hdr));
if(timespec_isset(&c->conn_timeout) && timespec_lt(&c->conn_timeout, &now)) {
errno = ETIMEDOUT;
c->state = CLOSED;
+ buffer_clear(&c->sndbuf);
+ buffer_clear(&c->rcvbuf);
if(c->recv) {
c->recv(c, NULL, 0);
struct utcp_connection *c = utcp->connections[i];
if(!c->reapable) {
+ buffer_clear(&c->sndbuf);
+ buffer_clear(&c->rcvbuf);
+
if(c->recv) {
c->recv(c, NULL, 0);
}