RFR: 8275319 java.net.NetworkInterface throws java.lang.Error instead of SocketException [v3]

Alan Bateman alanb at openjdk.java.net
Tue Oct 19 06:50:52 UTC 2021


On Mon, 18 Oct 2021 16:57:10 GMT, Daniel Jeliński <duke at openjdk.java.net> wrote:

>> Per Java documentation, "[Error](https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/lang/Error.java#L30) [..] indicates serious problems that a reasonable application should not try to catch". Failure to enumerate network interfaces or addresses is not a serious enough situation; many applications can recover from this pretty easily.
>> 
>> All native methods (except `init()`) in [NetworkInterface](https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/net/NetworkInterface.java#L436) are declared with `throws SocketException`, so throwing SocketExceptions instead of Errors will match the declared interface.
>> 
>> Unix version of [NetworkInterface](https://github.com/openjdk/jdk/blob/master/src/java.base/unix/native/libnet/NetworkInterface.c#L1189) already throws `SocketException`s in similar situations, and does not throw `Error` under any circumstances.
>> 
>> I searched the bug database and mail archives, but could not find any discussion on the topic; if there's a reason to keep throwing `Error`s, I couldn't find it.
>> 
>> `tier1` tests pass, `java.net` tests pass. No new regression tests as I couldn't find any list of steps to reproduce the problem.
>> 
>> I don't have write access to JBS. I could use some help with creating a ticket.
>
> Daniel Jeliński has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Fix crash on GetIpAddrTable error

I think you've got this to a good place. It would be helpful if you could trim down some of the really long lines to keep to consistent with the existing code if possible. It's clear that there is a lot of cleanup needed in this area but that can be done in future PRs as needed.

src/java.base/windows/native/libnet/NetworkInterface_winXP.c line 232:

> 230: int getAllInterfacesAndAddresses (JNIEnv *env, netif **netifPP)
> 231: {
> 232:     int ret, flags;

This looks right but I can't relate this to your comment about the crash.

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

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


More information about the net-dev mailing list