diff --git a/tunnel/tcp.go b/tunnel/tcp.go index ba4b0b4..7816116 100644 --- a/tunnel/tcp.go +++ b/tunnel/tcp.go @@ -72,17 +72,13 @@ func relay(left, right net.Conn) { wg.Wait() } -func copyBuffer(dst io.Writer, src io.Reader) (err error) { +func copyBuffer(dst io.Writer, src io.Reader) error { buf := pool.Get(pool.RelayBufferSize) defer pool.Put(buf) - defer func() { - if err != nil { - if ne, ok := err.(net.Error); ok && ne.Timeout() { - err = nil /* ignore I/O timeout */ - } - } - }() - _, err = io.CopyBuffer(dst, src, buf) + _, err := io.CopyBuffer(dst, src, buf) + if ne, ok := err.(net.Error); ok && ne.Timeout() { + return nil /* ignore I/O timeout */ + } return err } diff --git a/tunnel/udp.go b/tunnel/udp.go index 80d74f7..c059ba6 100644 --- a/tunnel/udp.go +++ b/tunnel/udp.go @@ -86,10 +86,9 @@ func copyPacketBuffer(dst net.PacketConn, src net.PacketConn, to net.Addr, timeo for { src.SetReadDeadline(time.Now().Add(timeout)) n, _, err := src.ReadFrom(buf) - if err != nil { - if ne, ok := err.(net.Error); ok && ne.Timeout() { - return nil /* ignore I/O timeout */ - } + if ne, ok := err.(net.Error); ok && ne.Timeout() { + return nil /* ignore I/O timeout */ + } else if err != nil { return err }