From ab710f2714487806f2e09b6f16136439bcbbf268 Mon Sep 17 00:00:00 2001 From: v2ray Date: Thu, 23 Jun 2016 22:37:48 +0200 Subject: [PATCH] write buffer size --- transport/internet/kcp/config.go | 2 ++ transport/internet/kcp/connection.go | 28 +++++++++++++++------------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/transport/internet/kcp/config.go b/transport/internet/kcp/config.go index 7b087f949..318440410 100644 --- a/transport/internet/kcp/config.go +++ b/transport/internet/kcp/config.go @@ -6,6 +6,7 @@ type Config struct { UplinkCapacity int DownlinkCapacity int Congestion bool + WriteBuffer int } func (this *Config) Apply() { @@ -27,6 +28,7 @@ func DefaultConfig() Config { UplinkCapacity: 5, DownlinkCapacity: 20, Congestion: false, + WriteBuffer: 8 * 1024 * 1024, } } diff --git a/transport/internet/kcp/connection.go b/transport/internet/kcp/connection.go index 23666bf0a..56dac8ace 100644 --- a/transport/internet/kcp/connection.go +++ b/transport/internet/kcp/connection.go @@ -53,18 +53,19 @@ func nowMillisec() int64 { // Connection is a KCP connection over UDP. type Connection struct { sync.RWMutex - state ConnState - kcp *KCP // the core ARQ - kcpAccess sync.Mutex - block Authenticator - needUpdate bool - local, remote net.Addr - rd time.Time // read deadline - wd time.Time // write deadline - chReadEvent chan struct{} - writer io.WriteCloser - since int64 - terminateOnce signal.Once + state ConnState + kcp *KCP // the core ARQ + kcpAccess sync.Mutex + block Authenticator + needUpdate bool + local, remote net.Addr + rd time.Time // read deadline + wd time.Time // write deadline + chReadEvent chan struct{} + writer io.WriteCloser + since int64 + terminateOnce signal.Once + writeBufferSize int } // NewConnection create a new KCP connection between local and remote. @@ -82,6 +83,7 @@ func NewConnection(conv uint32, writerCloser io.WriteCloser, local *net.UDPAddr, conn.kcp.WndSize(effectiveConfig.GetSendingWindowSize(), effectiveConfig.GetReceivingWindowSize()) conn.kcp.NoDelay(1, effectiveConfig.Tti, 2, effectiveConfig.Congestion) conn.kcp.current = conn.Elapsed() + conn.writeBufferSize = effectiveConfig.WriteBuffer / effectiveConfig.Mtu go conn.updateTask() @@ -144,7 +146,7 @@ func (this *Connection) Write(b []byte) (int, error) { this.RUnlock() this.kcpAccess.Lock() - if this.kcp.WaitSnd() < int(this.kcp.snd_wnd) { + if this.kcp.WaitSnd() < this.writeBufferSize { nBytes := len(b) this.kcp.Send(b) this.kcp.current = this.Elapsed()