debug(c, "accepted %p %p\n", c, recv, priv);
c->recv = recv;
c->priv = priv;
+ c->do_poll = true;
set_state(c, ESTABLISHED);
}
c->snd.last++;
set_state(c, FIN_WAIT_1);
} else {
+ c->do_poll = true;
set_state(c, ESTABLISHED);
}
if(c->poll) {
if((c->state == ESTABLISHED || c->state == CLOSE_WAIT) && c->do_poll) {
c->do_poll = false;
- uint32_t len = buffer_free(&c->sndbuf);
+ uint32_t len = is_framed(c) ? min(buffer_free(&c->sndbuf), MAX_UNRELIABLE_SIZE) : buffer_free(&c->sndbuf);
if(len) {
c->poll(c, len);