From 7cff8746711417b57d1d248bcffd8dc0b44a2655 Mon Sep 17 00:00:00 2001 From: xqzr <34030394+xqzr@users.noreply.github.com> Date: Tue, 1 Apr 2025 03:01:46 +0800 Subject: [PATCH] Add `SO_KEEPALIVE` --- transport/internet/sockopt_windows.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/transport/internet/sockopt_windows.go b/transport/internet/sockopt_windows.go index 57b15c47..c452aeab 100644 --- a/transport/internet/sockopt_windows.go +++ b/transport/internet/sockopt_windows.go @@ -74,6 +74,9 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf return errors.New("failed to set TCP_KEEPIDLE", err) } } + if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1); err != nil { + return errors.New("failed to set SO_KEEPALIVE", err) + } } else if config.TcpKeepAliveInterval < 0 || config.TcpKeepAliveIdle < 0 { if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 0); err != nil { return errors.New("failed to unset SO_KEEPALIVE", err) @@ -100,6 +103,9 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) return errors.New("failed to set TCP_KEEPIDLE", err) } } + if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 1); err != nil { + return errors.New("failed to set SO_KEEPALIVE", err) + } } else if config.TcpKeepAliveInterval < 0 || config.TcpKeepAliveIdle < 0 { if err := syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_KEEPALIVE, 0); err != nil { return errors.New("failed to unset SO_KEEPALIVE", err)