RFR 8241305: Add protocol specific factory creation methods to SocketChannel and ServerSocketChannel
Alan Bateman
Alan.Bateman at oracle.com
Tue May 5 12:53:59 UTC 2020
On 05/05/2020 12:16, Michael McMahon wrote:
> Hi,
>
> Could I get the following change reviewed please?
>
> The change is to add new static factory creation methods
> to java.nio.channels.SocketChannel and
> java.nio.channels.ServerSocketChannel
> which take a java.net.ProtocolFamily. These are basically the same as
> a similar method that was added to DatagramChannel back in 1.7
> and which allow the creation of IPv4 only channels or IPv4/IPv6.
The javadoc and implementation looks good.
Minor comment is that the requiresNonNull is not really needed in
SocketChannel, ServerSocketChannel and DatagramSocket as they just
delegate to the provider which is specified to throw NPE already. Also
the second/subsequent lines of the @implSpec in SelectorProvider isn't
misaligned. It might be simpler to just not indent those lines.
The convention in this area is to organize the tests by class name.
There is an etc directory for tests that cover many channels that might
work.
OpenDefault.java - the @summary says that it tests the "no-arg open
method" but the test actually tests the socket address type returned by
the adaptor's getLocalAddress and getInetAddress methods. It read is as
adding test coverage to the existing APIs rather than the new APIs. A
few comments:
- I think we need to find a better name for this test, maybe
LocalSocketAddressType ?
- Can it be expanded to test getLocalAddress rather than just the socket
adaptor methods?
- The test names are openXXX but might be clearer if renamed to
something like testSocketChannel, testServerSocketChannel, .. as it
tests the local addresses that these channel report.
OpenConnect.java - this is a good combo test and you might want to beef
up the @summary to more fully describe what it does. You might want to
think about renaming too, maybe OpenAndConnect. A few questions/comments:
- Would it be possible to summarize the platform specific issues that
you are running into? Most of the MLS elements seem to be
DatagramChannel and it would be useful to get a summary of that issue (I
suspect part of it is trying to connect a UDP connect to the wildcard
address, something that doesn't make sense).
- Why is this test /othervm and is /timeout=30 needed?
- What is the purpose of cfactory and sfactory? I can't see how they
could ever be null. If they are removed then it would allow the static
openXXX methods to be cleaned up. At the use-sites it checks for null
and I assume they should go away too.
- I think linkLocalAddr should be removed or renamed to something like
ipv6LinkLocalAddress to make it clearer that it returns true when the
address is an IPv6 link local address. Alternatively might be clearer to
just filter at the two use-sites.
- connectNonBlocking doesn't look quite right. The connect method
returns a boolean to indicate if the connection is established. If it
returns false then you can register it with the Selector and select.
- A minor point is that the parameters can be ProtocolFamily rather than
StandardProtocolFamily.
- There are a couple of places the exceptions have unusual names, e.g.
catch (UnsupportedOperationException re), catch (Exception re). Where
these RuntimeException at some stage, maybe they can be renamed now.
I skimmed through the ProtocolFamilies test too and have several
comments but don't have time today to write all those down, I'll get to
in the next few days.
-Alan.
More information about the nio-dev
mailing list