RFR: 8330940: Impossible to create a socket backlog greater than 200 on Windows 8+ [v2]
Jaikiran Pai
jpai at openjdk.org
Mon Jun 16 09:52:33 UTC 2025
On Mon, 16 Jun 2025 07:46:33 GMT, Alan Bateman <alanb at openjdk.org> wrote:
>> Jaikiran Pai has updated the pull request incrementally with four additional commits since the last revision:
>>
>> - include a test for AsynchronousServerSocketChannel
>> - System.err instead of System.out
>> - trim down code comment
>> - > 200 instead of >= 200
>
> test/jdk/java/net/ServerSocket/LargeBacklogTest.java line 43:
>
>> 41: * @run junit LargeBacklogTest
>> 42: */
>> 43: class LargeBacklogTest {
>
> How reliable is this test? If it is reliable then we can add tests for SocketChannelChannel::socket and AsynchronousServerSocket too.
I have run this test over a 1000 times in our CI and it hasn't failed even once. The test methods themselves complete in a few milli seconds:
SUCCESSFUL LargeBacklogTest::testServerSocket 'testServerSocket()' [180ms]
SUCCESSFUL LargeBacklogTest::testServerSocketChannel 'testServerSocketChannel()' [92ms]
SUCCESSFUL LargeBacklogTest::testAsynchronousServerSocketChannel 'testAsynchronousServerSocketChannel()' [88ms]
so the speed is good too. Plus, the test has been written in a manner where it allows a some leeway when asserting for the backlogged connection count for the cases where some unexpected process on the host might attempt a connection to this server. Given this, I think the test is reliable.
> If it is reliable then we can add tests for SocketChannelChannel::socket and AsynchronousServerSocket too.
I've update the PR to add one for `AsynchronousServerSocket`. It already had test for `ServerSocket` and `ServerSocketChannel`. As for `SocketChannelChannel::socket`, that appears to be a typo. Is there any other channel type you wanted to be tested too?
> test/jdk/java/net/ServerSocket/LargeBacklogTest.java line 72:
>
>> 70: private static void testBackloggedConnects(final int backlog, final int serverPort) {
>> 71: int numSuccessfulConnects = 0;
>> 72: System.out.println("attempting " + backlog + " connections to port " + serverPort);
>
> I don't know if this is a left over trace message or not. If intended then you might have to change it to use System.err so that it inlines with the test (at least I think JUnit uses System.err, TestNG uses System.out).
I hadn't paid attention to this detail, but yes you are right the junit logs - `STARTED ...`, `SUCCESSFUL ....`, `FAILED ...` appear on System.err. So yes, having these rest of the logs appear there would be a good thing. I have updated the PR to replace System.out with System.err.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/25819#discussion_r2149522443
PR Review Comment: https://git.openjdk.org/jdk/pull/25819#discussion_r2149526743
More information about the net-dev
mailing list