Enable new TcpKeepAlive options on Java 8 #701
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This change sets the new KeepAlive-related options directly through the JDK, instead of going through
SocketSupport. There are two reasons for this.First, the
SocketSupportcode path doesn't work on Java 8, as it attempts to reflectively callSocket.setOption(), which was added in newer versions.Second, the options themselves do exist on Java 8. The Java socket options were backported to Java 8 in 8u261 (July 2020):
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8194298
As for Windows, it supports
TCP_KEEPIDLEandTCP_KEEPINTVLsince Windows 10 version 1709 (October 2017):https://learn.microsoft.com/en-us/windows/win32/winsock/ipproto-tcp-socket-options
I think it's safe at this point to simply use these features like any other socket option. Unfortunately, it doesn't look like Mojo signatures are distributed for newer maintenance releases of Java 8, so I've had to update
hc.animal-sniffer.signature.ignores.Finally, I've added test coverage in TestTlsHandshakeTimeout to exercise this feature, as well as to assert that KeepAlive doesn't interfere with socket timeouts.