X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=utcp.c;h=65885287f599631b045c563b2564ef3301a893d3;hb=14892644247e46fc06f805d2653733bbdf45fb17;hp=a65eb145a5477b860ee7c2663cfc0793a4fece92;hpb=2cc55402361be4a017d10a9641807f2bd6b4ea5c;p=utcp diff --git a/utcp.c b/utcp.c index a65eb14..6588528 100644 --- a/utcp.c +++ b/utcp.c @@ -954,12 +954,19 @@ static void retransmit(struct utcp_connection *c) { break; case ESTABLISHED: + case FIN_WAIT_1: pkt.hdr.seq = c->snd.una; pkt.hdr.ack = c->rcv.nxt; pkt.hdr.ctl = ACK; uint32_t len = seqdiff(c->snd.nxt, c->snd.una); + if(c->state == FIN_WAIT_1) + len--; if(len > utcp->mtu) len = utcp->mtu; + else { + if(c->state == FIN_WAIT_1) + pkt.hdr.ctl |= FIN; + } memcpy(pkt.data, c->sndbuf, len); print_packet(c->utcp, "rtrx", &pkt, sizeof pkt.hdr + len); utcp->send(utcp, &pkt, sizeof pkt.hdr + len);