diff --git a/common/dialer/default.go b/common/dialer/default.go index 5c935d228..7b7036d26 100644 --- a/common/dialer/default.go +++ b/common/dialer/default.go @@ -142,8 +142,7 @@ func NewDefault(ctx context.Context, options option.DialerOptions) (*DefaultDial dialer.Timeout = C.TCPConnectTimeout } // TODO: Add an option to customize the keep alive period - dialer.KeepAlive = C.TCPKeepAliveInitial - dialer.Control = control.Append(dialer.Control, control.SetKeepAlivePeriod(C.TCPKeepAliveInitial, C.TCPKeepAliveInterval)) + setKeepAliveConfig(&dialer, C.TCPKeepAliveInitial, C.TCPKeepAliveInterval) var udpFragment bool if options.UDPFragment != nil { udpFragment = *options.UDPFragment diff --git a/common/dialer/default_go123.go b/common/dialer/default_go123.go new file mode 100644 index 000000000..67a789da9 --- /dev/null +++ b/common/dialer/default_go123.go @@ -0,0 +1,16 @@ +//go:build go1.23 + +package dialer + +import ( + "net" + "time" +) + +func setKeepAliveConfig(dialer *net.Dialer, idle time.Duration, interval time.Duration) { + dialer.KeepAliveConfig = net.KeepAliveConfig{ + Enable: true, + Idle: idle, + Interval: interval, + } +} diff --git a/common/dialer/default_nongo123.go b/common/dialer/default_nongo123.go new file mode 100644 index 000000000..3a5ad15ec --- /dev/null +++ b/common/dialer/default_nongo123.go @@ -0,0 +1,15 @@ +//go:build !go1.23 + +package dialer + +import ( + "net" + "time" + + "github.com/sagernet/sing/common/control" +) + +func setKeepAliveConfig(dialer *net.Dialer, idle time.Duration, interval time.Duration) { + dialer.KeepAlive = idle + dialer.Control = control.Append(dialer.Control, control.SetKeepAlivePeriod(idle, interval)) +}