RFR: 8285515: (dc) DatagramChannel.disconnect fails with "Invalid argument" on macOS 12.4 beta2

Alan Bateman alanb at openjdk.java.net
Thu Apr 28 10:28:41 UTC 2022


On Thu, 28 Apr 2022 09:37:17 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

> Can I please get a review of this change with proposes to address the issue reported in https://bugs.openjdk.java.net/browse/JDK-8285515?
> 
> We have noticed that in the latest 12.4 Beta2 version of MacOSX, the implementation of `DatagramChannelImpl.disconnect` fails with an unexpected error. 
> 
> Internally, the disconnect is implemented as a call to `connect` by passing it a "null" address as suggested in the documentation of `man connect`. In previous versions of MacOSX, this call used to return a `EADDRNOTAVAIL` errno and at the same time would correctly dissolve the connected association. The `EADDRNOTAVAIL` was then caught and intentionally ignored by the code in the JNI layer in `DatagramChannelImpl.disconnect0`.
> 
> In MacOSX 12.4 Beta 2 we are now seeing this `connect` call return `EINVAL`. This change in behaviour is noticed only for IPv4-mapped IPv6 addresses.
> 
> The `man connect` documentation on MacOSX states that even `disconnectx` can be used to disconnect datagram sockets. The commit here does that change to use `disconnectx` for MacOSX. Tests have been successfully run on some older Mac setups  to make sure this change passes there as well.
> 
> Currently `tier1`, `tier2` and `tier3` run is in progress across various OS.
> 
> No additional tests have been added for this change since the many existing (failing) tests already cover this use case.

src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c line 54:

> 52: 
> 53: #if defined(__APPLE__)
> 54:     // On MacOSX systems we use disconnectx

Thanks for doing this. Do you mind changing this comment to "macOS" as I think that is how the OS is named these days.

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

PR: https://git.openjdk.java.net/jdk/pull/8445


More information about the nio-dev mailing list