mirror of
https://github.com/cedar2025/hysteria.git
synced 2025-06-08 13:29:56 +00:00
Fix TCP timeout not works in TUN server
This commit is contained in:
parent
abfacebd40
commit
68d8cd4043
@ -222,6 +222,11 @@ func client(config *clientConfig) {
|
|||||||
"src": addr.String(),
|
"src": addr.String(),
|
||||||
"dst": reqAddr,
|
"dst": reqAddr,
|
||||||
}).Debugf("TUN %s closed for timeout", strings.ToUpper(addr.Network()))
|
}).Debugf("TUN %s closed for timeout", strings.ToUpper(addr.Network()))
|
||||||
|
} else if err.Error() == "deadline exceeded" && strings.HasPrefix(addr.Network(), "tcp") {
|
||||||
|
logrus.WithFields(logrus.Fields{
|
||||||
|
"src": addr.String(),
|
||||||
|
"dst": reqAddr,
|
||||||
|
}).Debugf("TUN %s closed for timeout", strings.ToUpper(addr.Network()))
|
||||||
} else {
|
} else {
|
||||||
logrus.WithFields(logrus.Fields{
|
logrus.WithFields(logrus.Fields{
|
||||||
"error": err,
|
"error": err,
|
||||||
|
@ -3,6 +3,7 @@ package tun
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
tun2socks "github.com/eycorsican/go-tun2socks/core"
|
||||||
"github.com/tobyxdd/hysteria/pkg/acl"
|
"github.com/tobyxdd/hysteria/pkg/acl"
|
||||||
"github.com/tobyxdd/hysteria/pkg/utils"
|
"github.com/tobyxdd/hysteria/pkg/utils"
|
||||||
"net"
|
"net"
|
||||||
@ -65,10 +66,15 @@ func (s *Server) Handle(conn net.Conn, target *net.TCPAddr) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) relayTCP(clientConn, relayConn net.Conn) {
|
func (s *Server) relayTCP(clientConn, relayConn net.Conn) {
|
||||||
closeErr := utils.PipePairWithTimeout(clientConn, relayConn, s.Timeout)
|
closeErr := utils.PipePairWithTimeout(relayConn, clientConn, s.Timeout)
|
||||||
if s.ErrorFunc != nil {
|
if s.ErrorFunc != nil {
|
||||||
s.ErrorFunc(clientConn.LocalAddr(), relayConn.RemoteAddr().String(), closeErr)
|
s.ErrorFunc(clientConn.LocalAddr(), relayConn.RemoteAddr().String(), closeErr)
|
||||||
}
|
}
|
||||||
relayConn.Close()
|
relayConn.Close()
|
||||||
clientConn.Close()
|
clientConn.Close()
|
||||||
|
if closeErr != nil && closeErr.Error() == "deadline exceeded" {
|
||||||
|
if clientConn, ok := clientConn.(tun2socks.TCPConn); ok {
|
||||||
|
clientConn.Abort()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user