瀏覽代碼

Removed manadory mandatory requirement for Read/Write Timeout

Shelikhoo 9 年之前
父節點
當前提交
d0d63ee5b3
共有 4 個文件被更改,包括 31 次插入13 次删除
  1. 1 0
      transport/config.go
  2. 3 10
      transport/hub/dialer.go
  3. 26 2
      transport/hub/kcp.go
  4. 1 1
      transport/hub/kcpv/config.go

+ 1 - 0
transport/config.go

@@ -17,6 +17,7 @@ func (this *Config) Apply() error {
 	enableKcp = this.enableKcp
 	if enableKcp {
 		KcpConfig = this.kcpConfig
+		connectionReuse = false
 	}
 	return nil
 }

+ 3 - 10
transport/hub/dialer.go

@@ -82,16 +82,9 @@ func DialKCP3(src v2net.Address, dest v2net.Destination, proxyMeta *proxy.Outbou
 		src = v2net.AnyIP
 	}
 	id := src.String() + "-" + dest.NetAddr()
-	var conn net.Conn
-	if dest.IsTCP() && transport.IsConnectionReusable() {
-		conn = globalCache.Get(id)
-	}
-	if conn == nil {
-		var err error
-		conn, err = DialWithoutCache3(src, dest, proxyMeta)
-		if err != nil {
-			return nil, err
-		}
+	conn, err := DialWithoutCache3(src, dest, proxyMeta)
+	if err != nil {
+		return nil, err
 	}
 	return &Connection{
 		dest:     id,

+ 26 - 2
transport/hub/kcp.go

@@ -13,8 +13,10 @@ import (
 )
 
 type KCPVlistener struct {
-	lst  *kcp.Listener
-	conf *kcpv.Config
+	lst                    *kcp.Listener
+	conf                   *kcpv.Config
+	previousSocketid       map[int]uint32
+	previousSocketid_mapid int
 }
 
 func (kvl *KCPVlistener) Accept() (net.Conn, error) {
@@ -23,6 +25,28 @@ func (kvl *KCPVlistener) Accept() (net.Conn, error) {
 		return nil, err
 	}
 
+	if kvl.previousSocketid == nil {
+		kvl.previousSocketid = make(map[int]uint32)
+	}
+
+	var badbit bool = false
+
+	for _, key := range kvl.previousSocketid {
+		log.Info("kcp: listener testing,", key, ":", conn.GetConv())
+		if key == conn.GetConv() {
+			badbit = true
+		}
+	}
+	if badbit {
+		return nil, errors.New("KCP:ConnDup, Don't worry~")
+	} else {
+		kvl.previousSocketid_mapid++
+		kvl.previousSocketid[kvl.previousSocketid_mapid] = conn.GetConv()
+		if kvl.previousSocketid_mapid >= 512 {
+			delete(kvl.previousSocketid, kvl.previousSocketid_mapid-512)
+		}
+	}
+
 	kcv := &KCPVconn{hc: conn}
 	kcv.conf = kvl.conf
 	err = kcv.ApplyConf()

+ 1 - 1
transport/hub/kcpv/config.go

@@ -18,5 +18,5 @@ type Config struct {
 }
 
 var DefaultAdvancedConfigs = &AdvancedConfig{
-	Mtu: 1350, Sndwnd: 1024, Rcvwnd: 1024, Fec: 4, Dscp: 0, ReadTimeout: 60, WriteTimeout: 40, Acknodelay: false,
+	Mtu: 1350, Sndwnd: 1024, Rcvwnd: 1024, Fec: 4, Dscp: 0, ReadTimeout: 18600, WriteTimeout: 18500, Acknodelay: false,
 }