fixed: message size of ack/una/winprobe could exceed mtu by 24 bytes

This commit is contained in:
skywind3000
2015-02-21 02:33:46 +08:00
parent 4d9eb2785b
commit 695e44711f
2 changed files with 12 additions and 5 deletions

8
ikcp.c
View File

@@ -865,7 +865,7 @@ void ikcp_flush(ikcpcb *kcp)
count = kcp->ackcount;
for (i = 0; i < count; i++) {
size = (int)(ptr - buffer);
if (size > (int)kcp->mtu) {
if (size + IKCP_OVERHEAD > (int)kcp->mtu) {
ikcp_output(kcp, buffer, size);
ptr = buffer;
}
@@ -901,7 +901,7 @@ void ikcp_flush(ikcpcb *kcp)
if (kcp->probe & IKCP_ASK_SEND) {
seg.cmd = IKCP_CMD_WASK;
size = (int)(ptr - buffer);
if (size > (int)kcp->mtu) {
if (size + IKCP_OVERHEAD > (int)kcp->mtu) {
ikcp_output(kcp, buffer, size);
ptr = buffer;
}
@@ -912,7 +912,7 @@ void ikcp_flush(ikcpcb *kcp)
if (kcp->probe & IKCP_ASK_TELL) {
seg.cmd = IKCP_CMD_WINS;
size = (int)(ptr - buffer);
if (size > (int)kcp->mtu) {
if (size + IKCP_OVERHEAD > (int)kcp->mtu) {
ikcp_output(kcp, buffer, size);
ptr = buffer;
}
@@ -992,7 +992,7 @@ void ikcp_flush(ikcpcb *kcp)
size = (int)(ptr - buffer);
need = IKCP_OVERHEAD + segment->len;
if (size + need >= (int)kcp->mtu) {
if (size + need > (int)kcp->mtu) {
ikcp_output(kcp, buffer, size);
ptr = buffer;
}