diff --git a/transport/internet/system_dialer.go b/transport/internet/system_dialer.go index f6408ef6..4945ff61 100644 --- a/transport/internet/system_dialer.go +++ b/transport/internet/system_dialer.go @@ -3,6 +3,7 @@ package internet import ( "context" "math/rand" + gonet "net" "syscall" "time" @@ -87,14 +88,22 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne Dest: destAddr, }, nil } - TCPKeepAlive := time.Duration(45) + TCPKeepAlive := time.Duration(1) + TCPKeepAliveConfig := gonet.KeepAliveConfig { + Enable: true, + Idle: 45 * time.Second, + Interval: 45 * time.Second, + Count: -1, + } if sockopt != nil && (sockopt.TcpKeepAliveInterval != 0 || sockopt.TcpKeepAliveIdle != 0) { TCPKeepAlive = time.Duration(-1) + TCPKeepAliveConfig.Enable = false } dialer := &net.Dialer{ Timeout: time.Second * 16, LocalAddr: resolveSrcAddr(dest.Network, src), KeepAlive: TCPKeepAlive, + KeepAliveConfig: TCPKeepAliveConfig, } if sockopt != nil || len(d.controllers) > 0 {