Patch for adding SO_REUSEPORT socket option
Seán Coffey
sean.coffey at oracle.com
Wed Feb 17 16:56:52 UTC 2016
One comment on the supportability side from me :
java/net/AbstractPlainDatagramSocketImpl.java
> + case SO_REUSEPORT:
> + if (o == null || !(o instanceof Boolean)) {
> + throw new SocketException("bad argument for
SO_REUSEPORT");
> + }
> + if
(!supportedOptions().contains(StandardSocketOptions.SO_REUSEPORT)) {
> + throw new
UnsupportedOperationException("unsupported option");
Can we improve the message ? e.g "SO_REUSEPORT is an unsupported
option" - line occurs twice.
Ditto for java/net/AbstractPlainSocketImpl.java and
java/net/PlainDatagramSocketImpl.java and java/net/PlainSocketImpl.java
(windows & unix variants)
java/net/DualStackPlainDatagramSocketImpl.java,
java/net/DualStackPlainSocketImpl.java, java/net/PlainSocketImpl.java,
java/net/TwoStacksPlainDatagramSocketImpl.java and
java/net/TwoStacksPlainSocketImpl.java also need tweaking on that message.
Thanks,
Sean.
On 17/02/16 11:43, Chris Hegarty wrote:
>
>> From: net-dev [mailto:net-dev-bounces at openjdk.java.net] On Behalf Of
>> Lu, Yingqi
>> Sent: Thursday, February 11, 2016 9:47 AM
>> To: Alan Bateman <Alan.Bateman at oracle.com>; Volker Simonis
>> <volker.simonis at gmail.com>; Michael McMahon
>> <michael.x.mcmahon at oracle.com>
>> Cc: Kaczmarek, Eric <eric.kaczmarek at intel.com>; Viswanathan, Sandhya
>> <sandhya.viswanathan at intel.com>; Kharbas, Kishor
>> <kishor.kharbas at intel.com>; Aundhe, Shirish
>> <shirish.aundhe at intel.com>; net-dev at openjdk.java.net
>> Subject: RE: Patch for adding SO_REUSEPORT socket option
>>
>> Hi Alan,
>>
>> Here is the most recent modification of the patch. The link is
>> available here:
>> http://cr.openjdk.java.net/~mcberg/jdk/6432031/webrev.11/
>
> I know this has gone through several rounds of review already.
> I do not want to stall progress, I am reasonably happy with the
> changes, but I have a few comments ( that can be addressed later,
> if needed ).
>
> - MulticastSocket.java: I would add a javadoc link to
> {@linkplain StandardSocketOptions.SO_REUSEPORT SO_REUSEPORT}
>
> - Maybe the socket impl set/getOption(..) methods should check
> supportedOptions().contains(name) first. There seems to be
> many places where SO_REUSEPORT is special-cased, that could
> be replaced with a general supported options check, no?
>
> - How useful is it to add SO_REUSEPORT to non-listening stream
> orientated sockets ?
>
> -Chris.
>
>
>
>> Please let us know if everything is all right.
>>
>> Again, thank you very much for your help!
>>
>> Thanks,
>> Lucy
>>
>>
>> -----Original Message-----
>> From: Alan Bateman [mailto:Alan.Bateman at oracle.com]
>> Sent: Wednesday, February 10, 2016 10:38 AM
>> To: Lu, Yingqi <yingqi.lu at intel.com>; Volker Simonis
>> <volker.simonis at gmail.com>; Michael McMahon
>> <michael.x.mcmahon at oracle.com>
>> Cc: net-dev at openjdk.java.net; Viswanathan, Sandhya
>> <sandhya.viswanathan at intel.com>; Kharbas, Kishor
>> <kishor.kharbas at intel.com>; Aundhe, Shirish
>> <shirish.aundhe at intel.com>; Kaczmarek, Eric <eric.kaczmarek at intel.com>
>> Subject: Re: Patch for adding SO_REUSEPORT socket option
>>
>> On 05/02/2016 17:27, Lu, Yingqi wrote:
>>> Hi Alan,
>>>
>>> Here is the new modification of the patch. The link is available here:
>>> http://cr.openjdk.java.net/~mcberg/jdk/6432031/webrev.10/
>>>
>>> In this version, we make supportedOptions() in
>>> AbstractPlainSocketImpl and AbstractPlainDatagramSocketImpl return
>>> an immutable set of the socket options. In addition, we corrected
>>> couple formatting issues.
>>>
>>> Please let us know your feedback and comments.
>>>
>> I've looked through the latest revision. Just a couple of small things:
>>
>> In MulticastSocket then a small typo (in two places) where you have
>> "SO_REUSPORT" instead of "SO_REUSEPORT". Also it links to
>> setOption(int,Object) then I assume it should be
>> setOption(SocketOption,Object).
>>
>> In AbstractPlainSocketImpl and AbstractPlainDatagramSocketImpl then
>> supportedOptions looks technically correct but there is no need to
>> create an unmodifiableSet on each call to supportedOptions. Instead
>> you can simply do:
>>
>> Set<SocketOption<?>> options = socketOptions; if (options == null) {
>> if (isReusePortAvailable()) {
>> options = new HashSet<>();
>> options.addAll(super.supportedOptions());
>> options.add(StandardSocketOptions.SO_REUSEPORT);
>> options = Collections.unmodifiableSet(options);
>> } else {
>> options = super.supportedOptions();
>> }
>> socketOptions = options;
>> }
>> return options;
>>
>> I don't see any other issues at this time and I'm happy to sponsor
>> and help you get this in.
>>
>> -Alan.
>>
>>
>>
More information about the net-dev
mailing list