修复滑动窗口出现负数的bug

This commit is contained in:
2026-10-07 12:34:23 +08:00
parent 862b860020
commit 156d74bbe3
20 changed files with 415 additions and 416 deletions
@@ -3,7 +3,6 @@ package org.kne.cloud.network.kltp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.BindException;
import java.net.Inet6Address;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.nio.ByteBuffer;
@@ -11,14 +10,11 @@ import java.nio.channels.WritableByteChannel;
import org.kne.cloud.network.klalb.KLALBScheduler;
import org.kne.concurrent.*;
import org.kne.cloud.network.NetworkPacket;
import org.kne.cloud.network.congestion.CongestionAlgorithm;
import org.kne.cloud.network.congestion.DCTCP2CongestionAlgorithm;
import org.kne.cloud.network.congestion.DCTCPCongestionAlgorithm;
import org.kne.cloud.network.congestion.SendPacketSlidingWindow;
import org.kne.cloud.network.ipv6.IPv6Address;
import org.kne.cloud.network.ipv6.IPv6Packet;
import org.kne.cloud.network.klalb.DATATPacket;
import org.kne.cloud.network.klalb.KLALBController;
import java.util.UUID;
@@ -240,19 +236,23 @@ public class KLTPOutputStream extends OutputStream implements KLTPPacketConsumer
@Override
public void run() {
if(sendMap.isClosed())
if(sendMap.isClosed()) {
tt.cancel(false);
try {
if(olock!=null)
olock.lock();
}else if(!sendMap.isCongestion()){
try {
flush0();
}finally {
if(olock!=null)
olock.unlock();
if (olock != null)
olock.lock();
try {
if(!sendMap.isCongestion()) {
flush0();
}
} finally {
if (olock != null)
olock.unlock();
}
} catch (IOException e) {
ioe.set(e);
}
} catch (IOException e) {
ioe.set(e);
}
}
};
@@ -273,7 +273,7 @@ public class KLTPOutputStream extends OutputStream implements KLTPPacketConsumer
sendMap.waitForAvaliable();
controller.getIpv6Router().runPacketSendTask(()->{
controller.getIpv6Router().enqueuePacketSendTask(()->{
pack.getKLTPData().flip();
pack.incSendCounter();
sendMap.put(pack.getSequence(),pack);
@@ -355,7 +355,7 @@ public class KLTPOutputStream extends OutputStream implements KLTPPacketConsumer
KLTPPacket kltp=(KLTPPacket) u.getPayload();
switch(kltp.getType()) {
case KLTPPacket.KLTP_TYPE_ACK:
sendMap.ack(kltp.getSequence(), kltp.isCE());
sendMap.ack(kltp.getSequence(),0, kltp.isCE());
break;
}