JDK 8 RFR 8010371: getaddrinfo can fail with EAI_SYSTEM/EAGAIN, causes UnknownHostException to be thrown

Alan Bateman Alan.Bateman at oracle.com
Thu Oct 10 13:52:53 UTC 2013


On 09/10/2013 19:16, Brian Burkhalter wrote:
> :
> I have created a simple implementation for option B:
>
> http://cr.openjdk.java.net/~bpb/8010371/webrev.3/
>
> I should note that the Unix Inet6 implementation was already using the call ThrowUnknownHostExceptionWithGaiError() to generate the UHE so in this case the message should already have been useful. This call formats the UHE message such as would:
>
> sprintf(error_message, "%s: %s", hostname, gai_strerror(error))
>
> I changed the Unix Inet4 implementation to do this as well instead of calling JNU_ThrowByName().
Thanks for persevering with this, we are on the right road now.

I just looked at JDK-8010371 and the "OS" field is set to "linux". I 
don't know if this is right but as IPv6 is usually enabled by default 
these days then I have to guess that the person that submitted the bug 
has IPv6 disabled or is running with -Djava.net.preferIPv4Stack=true, 
otherwise it would be a non-issue (as you have discovered).

The other thing about your observation is that 
ThrowUnknownHostExceptionWithGaiError is creating the UHE with the both 
the hostname and the error message. This resolves to the concern in one 
or two of the mails that the UHE names the exception message "host" and 
that someone might assume that the exception detail is the hostname.

So thumbs up on the update to src/solaris/native/java/net/Inet4Address.c.

>
> For Windows I added a similar NET_ ThrowUnknownHostExceptionWithGaiError and modified Inet{4,6} to mimic the Unix case. Note that the Windows code has not yet been compiled pending comments.
>
Inet4AddressImpl.lookupAllHostAddr uses gethostbyname and when I look at 
the MSDN documentation then I don't see EAI_AGAIN as possible error. It 
does list WSATRY_AGAIN and I'm wondering if they have the same value and 
whether the WSA* error is only returned by WSAGetLastError?

However I think we have a problem with using gai_strerror here as the 
MSDN documentation says that it is not thread safe. This means we may 
have to look for a WSA equivalent or maybe drop the Windows part of the 
fix (using a mutex of some synchronization might be possible but the 
scope would require research and of course it wouldn't work with 3rd 
party native code that is also using it).

-Alan







More information about the core-libs-dev mailing list