Alan, getaddrinfo could return EAI_AGAIN[1]
But recomended way is to just check return value of getaddrinfo and then use WSA functions especially, FormatMessage[2] instead of gai_strerror. Also we may consider rewriting this code using GetAddrInfoW sometimes in a future to support IDN. PS: Brian, please notice mixing WSA and EAI at ll. 137. [1] http://msdn.microsoft.com/en-us/library/windows/desktop/ms738520(v=vs.85).aspx [2] http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx On 2013-10-10 17:52, Alan Bateman wrote: > 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 > > > > -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.