From 9586e7bc8ecb894e03eb4785f5dd5a86688c3b07 Mon Sep 17 00:00:00 2001 From: wweir Date: Fri, 4 Jan 2019 16:55:59 +0800 Subject: [PATCH] Test close conn --- proxy/client.go | 7 +++---- proxy/server.go | 13 +++++-------- proxy/util.go | 12 ++++-------- shadow/shadow.go | 9 ++++----- 4 files changed, 16 insertions(+), 25 deletions(-) diff --git a/proxy/client.go b/proxy/client.go index 99dc6a2..08f701b 100644 --- a/proxy/client.go +++ b/proxy/client.go @@ -7,7 +7,6 @@ import ( "github.com/wweir/sower/proxy/kcp" "github.com/wweir/sower/proxy/quic" "github.com/wweir/sower/proxy/tcp" - "github.com/wweir/sower/shadow" ) type Client interface { @@ -37,9 +36,9 @@ func StartClient(netType, server, password string) { continue } - if rc, err = shadow.Shadow(rc, password); err != nil { - glog.Fatalln(err) - } + // if rc, err = shadow.Shadow(rc, password); err != nil { + // glog.Fatalln(err) + // } go relay(conn, rc) } diff --git a/proxy/server.go b/proxy/server.go index e107538..d6646be 100644 --- a/proxy/server.go +++ b/proxy/server.go @@ -9,7 +9,6 @@ import ( "github.com/wweir/sower/proxy/kcp" "github.com/wweir/sower/proxy/quic" "github.com/wweir/sower/proxy/tcp" - "github.com/wweir/sower/shadow" ) type Server interface { @@ -40,18 +39,16 @@ func StartServer(netType, port, password string) { for { conn := <-connCh - conn, err := shadow.Shadow(conn, password) - if err != nil { - glog.Fatalln(err) - } + // conn, err := shadow.Shadow(conn, password) + // if err != nil { + // glog.Fatalln(err) + // } go handle(conn) } } func handle(conn net.Conn) { - defer conn.Close() - conn, addr, err := parse.ParseAddr(conn) if err != nil { glog.Warningln(err) @@ -64,7 +61,7 @@ func handle(conn net.Conn) { glog.Warningln(err) return } - defer rc.Close() + if err := rc.(*net.TCPConn).SetKeepAlive(true); err != nil { glog.Warningln(err) } diff --git a/proxy/util.go b/proxy/util.go index 962ea9a..f427889 100644 --- a/proxy/util.go +++ b/proxy/util.go @@ -5,7 +5,6 @@ import ( "net" "sync" "sync/atomic" - "time" "github.com/golang/glog" ) @@ -22,10 +21,10 @@ const ( func relay(conn1, conn2 net.Conn) { wg := &sync.WaitGroup{} exitFlag := new(int32) - wg.Add(2) + go redirect(conn2, conn1, wg, exitFlag) redirect(conn1, conn2, wg, exitFlag) - wg.Wait() + } func redirect(dst, src net.Conn, wg *sync.WaitGroup, exitFlag *int32) { @@ -34,9 +33,6 @@ func redirect(dst, src net.Conn, wg *sync.WaitGroup, exitFlag *int32) { } atomic.AddInt32(exitFlag, 1) - // wakeup all conn goroutine - now := time.Now() - dst.SetDeadline(now) - src.SetDeadline(now) - wg.Done() + src.Close() + dst.Close() } diff --git a/shadow/shadow.go b/shadow/shadow.go index 7199e7f..2e4bc41 100644 --- a/shadow/shadow.go +++ b/shadow/shadow.go @@ -28,6 +28,10 @@ func (c *conn) Read(b []byte) (n int, err error) { c.readBuf, err = c.aead.Open(b[:0], c.decryptNonce(), b[:n], nil) return len(c.readBuf), err } +func (c *conn) Write(b []byte) (n int, err error) { + c.writeBuf = c.aead.Seal(nil, c.encryptNonce(), b, nil) + return c.Conn.Write(c.writeBuf) +} func Shadow(c net.Conn, password string) (net.Conn, error) { aead, err := newAEAD(password) @@ -43,11 +47,6 @@ func Shadow(c net.Conn, password string) (net.Conn, error) { }, nil } -func (c *conn) Write(b []byte) (n int, err error) { - c.writeBuf = c.aead.Seal(nil, c.encryptNonce(), b, nil) - return c.Conn.Write(c.writeBuf) -} - func newAEAD(password string) (cipher.AEAD, error) { block, err := aes.NewCipher([]byte(password + password)[:16]) if err != nil {