Explorar o código

correctly measure payload time

v2ray %!s(int64=9) %!d(string=hai) anos
pai
achega
6e615c5863
Modificáronse 1 ficheiros con 4 adicións e 1 borrados
  1. 4 1
      transport/internet/kcp/kcp.go

+ 4 - 1
transport/internet/kcp/kcp.go

@@ -67,6 +67,7 @@ type KCP struct {
 	state            State
 	stateBeginTime   uint32
 	lastIncomingTime uint32
+	lastPayloadTime  uint32
 	sendingUpdated   bool
 	receivingUpdated bool
 	lastPingTime     uint32
@@ -325,6 +326,7 @@ func (kcp *KCP) Input(data []byte) int {
 			kcp.shrink_buf()
 			kcp.acklist.Add(seg.Number, seg.Timestamp)
 			kcp.parse_data(seg)
+			kcp.lastPayloadTime = kcp.current
 		case *ACKSegment:
 			kcp.HandleOption(seg.Opt)
 			if kcp.rmt_wnd < seg.ReceivingWindow {
@@ -346,6 +348,7 @@ func (kcp *KCP) Input(data []byte) int {
 				}
 			}
 			kcp.shrink_buf()
+			kcp.lastPayloadTime = kcp.current
 		case *CmdOnlySegment:
 			kcp.HandleOption(seg.Opt)
 			if seg.Cmd == SegmentCommandTerminated {
@@ -377,7 +380,7 @@ func (kcp *KCP) flush() {
 	if kcp.state == StateTerminated {
 		return
 	}
-	if kcp.state == StateActive && _itimediff(kcp.current, kcp.lastIncomingTime) >= 30000 {
+	if kcp.state == StateActive && _itimediff(kcp.current, kcp.lastPayloadTime) >= 30000 {
 		kcp.OnClose()
 	}