On Thu, 15 Sep 2022 07:25:04 GMT, Man Cao <m...@openjdk.org> wrote:

> Hi all,
> 
> Could anyone review this bug fix for ipv6-only system? See 
> https://bugs.openjdk.org/browse/JDK-8293842 for detailed description of this 
> bug.
> 
> Ideally, the `socket(PF_INET6, ...)` or `socket(PF_INET, ...)` call should 
> depend on the value of `ipv6_available()`. However, this is only easy to do 
> in net_util_md.c. Without checking `ipv6_available()` in 
> <Linux|MacOSX>SocketOptions.c, I'm not sure if it is possible for ipv6 and 
> ipv4 sockets to differ in the options they support.
> 
> For example, for a system with both ipv6 and ipv4, if ipv6 supports 
> TCP_KEEPIDLE but ipv4 does not, then there might be a problem to always 
> report TCP_KEEPIDLE as supported. 
> 
> I noticed https://bugs.openjdk.org/browse/JDK-8290349 added "isIPv6" 
> parameter to a few functions in <Linux|MacOSX>SocketOptions.c. However, it is 
> not applicable to the `socketOptionSupported()` function. This change is more 
> similar to the `Java_jdk_net_MacOSXSocketOptions_ipDontFragmentSupported0()` 
> function.
> 
> -Man

src/java.base/share/native/libnet/net_util.c line 86:

> 84:      * Must be called after IPv6_available is initialized.
> 85:      */
> 86:     REUSEPORT_available = reuseport_supported();

An alternative to relying on initialization order would be to pass a parameter 
to reuseport_supported to specify whether to test IPv4 or IPv6.

-------------

PR: https://git.openjdk.org/jdk/pull/10278

Reply via email to