diff --git a/proxy/socks/tcp.go b/proxy/socks/tcp.go index 573d08b..6490f31 100644 --- a/proxy/socks/tcp.go +++ b/proxy/socks/tcp.go @@ -42,6 +42,9 @@ func (h *tcpHandler) relay(localConn, remoteConn net.Conn) { }) } + // Close + defer closeOnce() + // WaitGroup var wg sync.WaitGroup wg.Add(1) @@ -56,7 +59,6 @@ func (h *tcpHandler) relay(localConn, remoteConn net.Conn) { // Down Link io.Copy(localConn, remoteConn) tcpCloseRead(localConn) - defer closeOnce() wg.Wait() // Wait for Up Link done @@ -120,17 +122,3 @@ func (h *tcpHandler) Handle(localConn net.Conn, target *net.TCPAddr) error { log.Access(process, "proxy", target.Network(), localConn.LocalAddr().String(), targetAddr) return nil } - -func tcpKeepAlive(conn net.Conn) { - if tcp, ok := conn.(*net.TCPConn); ok { - tcp.SetKeepAlive(true) - tcp.SetKeepAlivePeriod(30 * time.Second) - } -} - -func tcpCloseRead(conn net.Conn) { - if c, ok := conn.(interface{ CloseRead() error }); ok { - log.Warnf("ok!") - c.CloseRead() - } -} diff --git a/proxy/socks/utils.go b/proxy/socks/utils.go new file mode 100644 index 0000000..38ee5ec --- /dev/null +++ b/proxy/socks/utils.go @@ -0,0 +1,28 @@ +package socks + +import ( + "net" + "time" + + "github.com/xjasonlyu/tun2socks/common/log" +) + +type duplexConn interface { + net.Conn + CloseRead() error + CloseWrite() error +} + +func tcpCloseRead(conn net.Conn) { + if c, ok := conn.(duplexConn); ok { + log.Warnf("ok!----") + c.CloseRead() + } +} + +func tcpKeepAlive(conn net.Conn) { + if tcp, ok := conn.(*net.TCPConn); ok { + tcp.SetKeepAlive(true) + tcp.SetKeepAlivePeriod(30 * time.Second) + } +}