Skip to content

Commit

Permalink
Optimize: don't need close read
Browse files Browse the repository at this point in the history
  • Loading branch information
nange committed Mar 27, 2023
1 parent 2e7c4ca commit 673f3e8
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 15 deletions.
13 changes: 8 additions & 5 deletions tunnel/statistic/tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ import (
M "github.com/xjasonlyu/tun2socks/v2/metadata"
)

type CloseWriter interface {
CloseWrite() error
}

type tracker interface {
ID() string
Close() error
Expand Down Expand Up @@ -74,12 +78,11 @@ func (tt *tcpTracker) Close() error {
return tt.Conn.Close()
}

func (tt *tcpTracker) CloseRead() error {
return tt.Conn.(*net.TCPConn).CloseRead()
}

func (tt *tcpTracker) CloseWrite() error {
return tt.Conn.(*net.TCPConn).CloseWrite()
if cw, ok := tt.Conn.(CloseWriter); ok {
return cw.CloseWrite()
}
return nil
}

type udpTracker struct {
Expand Down
25 changes: 15 additions & 10 deletions tunnel/tcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"net"
"sync"
"syscall"
"time"

"github.com/xjasonlyu/tun2socks/v2/common/pool"
"github.com/xjasonlyu/tun2socks/v2/core/adapter"
Expand All @@ -15,6 +16,10 @@ import (
"github.com/xjasonlyu/tun2socks/v2/tunnel/statistic"
)

const (
tcpWaitTimeout = 30 * time.Minute
)

func newTCPTracker(conn net.Conn, metadata *M.Metadata) net.Conn {
return statistic.NewTCPTracker(conn, metadata, statistic.DefaultManager)
}
Expand Down Expand Up @@ -59,25 +64,25 @@ func relay(left, right net.Conn) error {
if err := copyBuffer(right, left); err != nil {
leftErr = errors.Join(leftErr, err)
}
if err := left.(interface{ CloseRead() error }).CloseRead(); err != nil {
log.Warnf("[TCP] close read for left %v", err)
}
if err := right.(interface{ CloseWrite() error }).CloseWrite(); err != nil {
log.Warnf("[TCP] close write for right %v", err)
if cw, ok := right.(statistic.CloseWriter); ok {
if err := cw.CloseWrite(); err != nil && !isIgnorable(err) {
leftErr = errors.Join(leftErr, err)
}
}
right.SetReadDeadline(time.Now().Add(tcpWaitTimeout))
}()

go func() {
defer wg.Done()
if err := copyBuffer(left, right); err != nil {
rightErr = errors.Join(rightErr, err)
}
if err := right.(interface{ CloseRead() error }).CloseRead(); err != nil {
log.Warnf("[TCP] close read for right %v", err)
}
if err := left.(interface{ CloseWrite() error }).CloseWrite(); err != nil {
log.Warnf("[TCP] close write for left %v", err)
if cw, ok := left.(statistic.CloseWriter); ok {
if err := cw.CloseWrite(); err != nil && !isIgnorable(err) {
rightErr = errors.Join(rightErr, err)
}
}
left.SetReadDeadline(time.Now().Add(tcpWaitTimeout))
}()

wg.Wait()
Expand Down

0 comments on commit 673f3e8

Please sign in to comment.