diff --git a/cmd/client.go b/cmd/client.go index ba25fac..3bb7614 100644 --- a/cmd/client.go +++ b/cmd/client.go @@ -275,7 +275,7 @@ func client(config *clientConfig) { "src": addr.String(), "dst": reqAddr, }).Debugf("TUN %s closed for timeout", strings.ToUpper(addr.Network())) - } else if err.Error() == "deadline exceeded" && strings.HasPrefix(addr.Network(), "tcp") { + } else if nErr, ok := err.(net.Error); ok && nErr.Timeout() && strings.HasPrefix(addr.Network(), "tcp") { logrus.WithFields(logrus.Fields{ "src": addr.String(), "dst": reqAddr, diff --git a/pkg/tun/tcp.go b/pkg/tun/tcp.go index f1bac1c..6fa0ab4 100644 --- a/pkg/tun/tcp.go +++ b/pkg/tun/tcp.go @@ -35,9 +35,11 @@ func (s *Server) relayTCP(clientConn, relayConn net.Conn) { } relayConn.Close() clientConn.Close() - if closeErr != nil && closeErr.Error() == "deadline exceeded" { - if clientConn, ok := clientConn.(tun2socks.TCPConn); ok { - clientConn.Abort() + if closeErr != nil { + if err, ok := closeErr.(net.Error); ok && err.Timeout() { + if clientConn, ok := clientConn.(tun2socks.TCPConn); ok { + clientConn.Abort() + } } } }