diff --git a/proxy/socks/tcp.go b/proxy/socks/tcp.go index 6490f31..577e59b 100644 --- a/proxy/socks/tcp.go +++ b/proxy/socks/tcp.go @@ -52,13 +52,15 @@ func (h *tcpHandler) relay(localConn, remoteConn net.Conn) { // Up Link go func() { io.Copy(remoteConn, localConn) - //closeOnce() + tcpCloseRead(localConn) + tcpCloseWrite(remoteConn) wg.Done() }() // Down Link io.Copy(localConn, remoteConn) - tcpCloseRead(localConn) + tcpCloseRead(remoteConn) + tcpCloseWrite(localConn) wg.Wait() // Wait for Up Link done diff --git a/proxy/socks/utils.go b/proxy/socks/utils.go index 38ee5ec..21b7386 100644 --- a/proxy/socks/utils.go +++ b/proxy/socks/utils.go @@ -20,6 +20,13 @@ func tcpCloseRead(conn net.Conn) { } } +func tcpCloseWrite(conn net.Conn) { + if c, ok := conn.(duplexConn); ok { + log.Warnf("ok!++++") + c.CloseWrite() + } +} + func tcpKeepAlive(conn net.Conn) { if tcp, ok := conn.(*net.TCPConn); ok { tcp.SetKeepAlive(true)