diff --git a/transport/internet/kcp/config.go b/transport/internet/kcp/config.go index ce501477..a31ba947 100644 --- a/transport/internet/kcp/config.go +++ b/transport/internet/kcp/config.go @@ -44,15 +44,18 @@ func (this *Config) GetSendingBufferSize() uint32 { return this.GetSendingInFlightSize() + this.WriteBuffer/this.Mtu } -func (this *Config) GetReceivingBufferSize() uint32 { +func (this *Config) GetReceivingInFlightSize() uint32 { size := this.DownlinkCapacity * 1024 * 1024 / this.Mtu / (1000 / this.Tti) / 2 if size < 8 { size = 8 } - size += this.ReadBuffer / this.Mtu return size } +func (this *Config) GetReceivingBufferSize() uint32 { + return this.GetReceivingInFlightSize() + this.ReadBuffer/this.Mtu +} + func DefaultConfig() Config { return Config{ Mtu: 1350, diff --git a/transport/internet/kcp/receiving.go b/transport/internet/kcp/receiving.go index bb579292..f30384ba 100644 --- a/transport/internet/kcp/receiving.go +++ b/transport/internet/kcp/receiving.go @@ -123,11 +123,10 @@ type ReceivingWorker struct { } func NewReceivingWorker(kcp *Connection) *ReceivingWorker { - windowSize := effectiveConfig.GetReceivingBufferSize() worker := &ReceivingWorker{ conn: kcp, - window: NewReceivingWindow(windowSize), - windowSize: windowSize, + window: NewReceivingWindow(effectiveConfig.GetReceivingBufferSize()), + windowSize: effectiveConfig.GetReceivingInFlightSize(), } worker.acklist = NewAckList(worker) return worker @@ -155,6 +154,7 @@ func (this *ReceivingWorker) ProcessSegment(seg *DataSegment) { if !this.window.Set(idx, seg) { seg.Release() } + this.updated = true } func (this *ReceivingWorker) Read(b []byte) int {