-
Notifications
You must be signed in to change notification settings - Fork 4.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Separate TcpKeepAliveIdle and TcpKeepAliveInterval check logic #1484
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,8 @@ const ( | |
TCP_FASTOPEN_SERVER = 0x01 // nolint: revive,stylecheck | ||
// TCP_FASTOPEN_CLIENT is the value to enable TCP fast open on darwin for client connections. | ||
TCP_FASTOPEN_CLIENT = 0x02 // nolint: revive,stylecheck | ||
// syscall.TCP_KEEPINTVL is missing on some darwin architectures. | ||
sysTCP_KEEPINTVL = 0x101 // nolint: revive,stylecheck | ||
) | ||
|
||
func applyOutboundSocketOptions(network string, address string, fd uintptr, config *SocketConfig) error { | ||
|
@@ -24,9 +26,16 @@ func applyOutboundSocketOptions(network string, address string, fd uintptr, conf | |
} | ||
} | ||
|
||
if config.TcpKeepAliveInterval > 0 { | ||
if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, unix.TCP_KEEPINTVL, int(config.TcpKeepAliveInterval)); err != nil { | ||
return newError("failed to set TCP_KEEPINTVL", err) | ||
if config.TcpKeepAliveIdle > 0 || config.TcpKeepAliveInterval > 0 { | ||
if config.TcpKeepAliveIdle > 0 { | ||
if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, unix.TCP_KEEPALIVE, int(config.TcpKeepAliveInterval)); err != nil { | ||
return newError("failed to set TCP_KEEPINTVL", err) | ||
} | ||
} | ||
if config.TcpKeepAliveInterval > 0 { | ||
if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, sysTCP_KEEPINTVL, int(config.TcpKeepAliveIdle)); err != nil { | ||
return newError("failed to set TCP_KEEPIDLE", err) | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think moving There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Your recommendation have been adapted at 406e0f7. |
||
} | ||
if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_KEEPALIVE, 1); err != nil { | ||
return newError("failed to set SO_KEEPALIVE", err) | ||
|
@@ -49,9 +58,16 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) | |
return err | ||
} | ||
} | ||
if config.TcpKeepAliveInterval > 0 { | ||
if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, unix.TCP_KEEPINTVL, int(config.TcpKeepAliveInterval)); err != nil { | ||
return newError("failed to set TCP_KEEPINTVL", err) | ||
if config.TcpKeepAliveIdle > 0 || config.TcpKeepAliveInterval > 0 { | ||
if config.TcpKeepAliveIdle > 0 { | ||
if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, unix.TCP_KEEPALIVE, int(config.TcpKeepAliveInterval)); err != nil { | ||
return newError("failed to set TCP_KEEPINTVL", err) | ||
} | ||
} | ||
if config.TcpKeepAliveInterval > 0 { | ||
if err := unix.SetsockoptInt(int(fd), unix.IPPROTO_TCP, sysTCP_KEEPINTVL, int(config.TcpKeepAliveIdle)); err != nil { | ||
return newError("failed to set TCP_KEEPIDLE", err) | ||
} | ||
} | ||
if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_KEEPALIVE, 1); err != nil { | ||
return newError("failed to set SO_KEEPALIVE", err) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Which darwin architectures are missing
TCP_KEEPINTVL
? We are usingx/sys/unix
here, notsyscall
, please double check.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've copied this from https://github.com/golang/go/blob/master/src/net/tcpsockopt_darwin.go
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's not where you should be looking at.
https://github.com/golang/sys/blob/1d35b9e2eb4edf581781c7f3e2a36fac701f0a24/unix/zerrors_darwin_amd64.go#L1459
https://github.com/golang/sys/blob/1d35b9e2eb4edf581781c7f3e2a36fac701f0a24/unix/zerrors_darwin_arm64.go#L1459
TCP_KEEPINTVL
is present for bothdarwin-amd64
anddarwin-arm64
. You can safely useunix.TCP_KEEPINTVL
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your recommendation have been adapted at 406e0f7.