On 05/08/2022 20:43, Chris Hegarty wrote:
:

I'm not sure that there is anything that should (or could) be done about
this - an SPI for extended options is not really viable or suitable. Our
use of reflection really obfuscated the bug, but equally code that
deals with the extended socket options is often conditional so as to
tolerate running on different platforms. Anyway, I thought it worth
sharing, since it's both interesting (to me) and informative (in case
someone else encounters similar).
Run-time argumentation of JDK modules was on the list of the requirements for Project Jigsaw at one point but it bring a significant number of surprises and may not be worth it. Right now it is limited to support tooling, e.g. loading the JMX agent at run-time, where it is mostly transparent that the augmentation is done by via a child layer.

I think there is merit is re-examining the integration of the jdk.net module. Not high priority but I think the "triggered registration" should be removed and the implemented of extended socket options should move to java.base, the jdk.net module should just expose the API. That would align with how extended open/copy options work in the jdk.unsupported module and the extended map mode in the jdk.nio.mapmode module. It would have internal mirrors for complex socket options but that isn't too hard to do.

Introducing a service interface and having jdk.net provide an implementation may be worth thinking about too. The type for many socket options is a boolean or integer so they could be used without needing a static reference to the extended socket option. I'm not saying this would be the best way to set/get socket options but it would allow code to find the socket option in the supported set and make use of it without a static reference, something that would help the scenario you outline where a library is supported across a range of releases and doesn't want to make use of MR JARs.

-Alan

Reply via email to