@@ -45,7 +45,7 @@ const (
45
45
IKCP_ACK_FAST = 3
46
46
IKCP_INTERVAL = 100
47
47
IKCP_OVERHEAD = 24
48
- IKCP_DEADLINK = 20
48
+ IKCP_DEADLINK = 200 //rodent, 20 seems to low
49
49
IKCP_THRESH_INIT = 2
50
50
IKCP_THRESH_MIN = 2
51
51
IKCP_PROBE_INIT = 7000 // 7 secs to probe window size
@@ -148,6 +148,7 @@ func (seg *segment) encode(ptr []byte) []byte {
148
148
ptr = ikcp_encode32u (ptr , seg .una )
149
149
ptr = ikcp_encode32u (ptr , uint32 (len (seg .data )))
150
150
atomic .AddUint64 (& DefaultSnmp .OutSegs , 1 )
151
+
151
152
return ptr
152
153
}
153
154
@@ -176,6 +177,7 @@ type KCP struct {
176
177
177
178
buffer []byte
178
179
output output_callback
180
+ snmp Snmp
179
181
}
180
182
181
183
type ackItem struct {
@@ -608,6 +610,7 @@ func (kcp *KCP) Input(data []byte, regular, ackNoDelay bool) int {
608
610
}
609
611
if regular && repeat {
610
612
atomic .AddUint64 (& DefaultSnmp .RepeatSegs , 1 )
613
+ atomic .AddUint64 (& kcp .snmp .RepeatSegs , 1 )
611
614
}
612
615
} else if cmd == IKCP_CMD_WASK {
613
616
// ready to send back IKCP_CMD_WINS in Ikcp_flush
@@ -623,6 +626,7 @@ func (kcp *KCP) Input(data []byte, regular, ackNoDelay bool) int {
623
626
data = data [length :]
624
627
}
625
628
atomic .AddUint64 (& DefaultSnmp .InSegs , inSegs )
629
+ atomic .AddUint64 (& kcp .snmp .InSegs , inSegs )
626
630
627
631
// update rtt with the latest ts
628
632
// ignore the FEC packet
@@ -712,6 +716,7 @@ func (kcp *KCP) flush(ackOnly bool) uint32 {
712
716
if _itimediff (ack .sn , kcp .rcv_nxt ) >= 0 || len (kcp .acklist )- 1 == i {
713
717
seg .sn , seg .ts = ack .sn , ack .ts
714
718
ptr = seg .encode (ptr )
719
+ atomic .AddUint64 (& kcp .snmp .OutSegs , 1 )
715
720
}
716
721
}
717
722
kcp .acklist = kcp .acklist [0 :0 ]
@@ -750,13 +755,15 @@ func (kcp *KCP) flush(ackOnly bool) uint32 {
750
755
seg .cmd = IKCP_CMD_WASK
751
756
makeSpace (IKCP_OVERHEAD )
752
757
ptr = seg .encode (ptr )
758
+ atomic .AddUint64 (& kcp .snmp .OutSegs , 1 )
753
759
}
754
760
755
761
// flush window probing commands
756
762
if (kcp .probe & IKCP_ASK_TELL ) != 0 {
757
763
seg .cmd = IKCP_CMD_WINS
758
764
makeSpace (IKCP_OVERHEAD )
759
765
ptr = seg .encode (ptr )
766
+ atomic .AddUint64 (& kcp .snmp .OutSegs , 1 )
760
767
}
761
768
762
769
kcp .probe = 0
@@ -843,6 +850,7 @@ func (kcp *KCP) flush(ackOnly bool) uint32 {
843
850
need := IKCP_OVERHEAD + len (segment .data )
844
851
makeSpace (need )
845
852
ptr = segment .encode (ptr )
853
+ atomic .AddUint64 (& kcp .snmp .OutSegs , 1 )
846
854
copy (ptr , segment .data )
847
855
ptr = ptr [len (segment .data ):]
848
856
@@ -862,19 +870,23 @@ func (kcp *KCP) flush(ackOnly bool) uint32 {
862
870
863
871
// counter updates
864
872
sum := lostSegs
865
- if lostSegs > 0 {
873
+ if lostSegs > 0 {
866
874
atomic .AddUint64 (& DefaultSnmp .LostSegs , lostSegs )
875
+ atomic .AddUint64 (& kcp .snmp .LostSegs , lostSegs )
867
876
}
868
877
if fastRetransSegs > 0 {
869
878
atomic .AddUint64 (& DefaultSnmp .FastRetransSegs , fastRetransSegs )
879
+ atomic .AddUint64 (& kcp .snmp .FastRetransSegs , fastRetransSegs )
870
880
sum += fastRetransSegs
871
881
}
872
882
if earlyRetransSegs > 0 {
873
883
atomic .AddUint64 (& DefaultSnmp .EarlyRetransSegs , earlyRetransSegs )
884
+ atomic .AddUint64 (& kcp .snmp .EarlyRetransSegs , earlyRetransSegs )
874
885
sum += earlyRetransSegs
875
886
}
876
887
if sum > 0 {
877
888
atomic .AddUint64 (& DefaultSnmp .RetransSegs , sum )
889
+ atomic .AddUint64 (& kcp .snmp .RetransSegs , sum )
878
890
}
879
891
880
892
// cwnd update
0 commit comments