Behaviour of SocketChannelImpl.close() in Java11 (ea+12)
Norman Maurer
norman.maurer at googlemail.com
Fri May 11 18:10:35 UTC 2018
Hi all,
I recently started to test Netty [1] with Java11 and found that we have two tests that are currently failing due some changes in Java 11 compared to earlier versions.
I wanted to get your thoughts on the behaviour changes:
1) SocketChannelImpl.close() will trigger shutdown(…,SHUT_WR) if the channel is connected before do the actual close(…).
This is different to earlier version where it was just closed via close(…). We noticed this because we have a unit test that basically set SO_LINGER 0 and verifies that the remote peer sees a ECONNRESET when channel is closed. This is not the case here anymore as the shutdown will cause an EOF.
I wonder depending on the connection reset is just plain wrong from our side as its an implementation detail, but at least it was super surprising to me that a shutdown(…) was called during the close operation. Especially as shutdownOutput() is exposed directly as well.
2) SocketChannelImpl.close() will not directly close the fd but add it to a queue that will be processed by the Selector.
Again this is different to earlier versions and had the effect that one test failed that expected that the fd is really closed when close() returns.
I worked around these differences via [2] but I wanted to ask if this is expected.
Java version:
java version "11-ea" 2018-09-25
Java(TM) SE Runtime Environment 18.9 (build 11-ea+12)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11-ea+12, mixed mode)
[1] http://netty.io <http://netty.io/>
[2] https://github.com/netty/netty/pull/7926 <https://github.com/netty/netty/pull/7926>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/net-dev/attachments/20180511/25fc9251/attachment.html>
More information about the net-dev
mailing list