-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
8u45
-
x86
-
os_x
FULL PRODUCT VERSION :
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
OS X Yosemite: Version 10.10.4 (14E46)
EXTRA RELEVANT SYSTEM CONFIGURATION :
I'm on a network with full support for IPv6.
A DESCRIPTION OF THE PROBLEM :
Opening a socket to an IPv6-only host results in a 'No Route to Host' exception when instantiating a socket with either a host name or an IP address. I should note that I can ping the host, connect to the host with a web browser, and connect with sockets in other languages. Opening a socket with other programming languages results in a successful socket connection (tested in python). If instead of instantiating the socket with a hostname, i specify the IP address with the scope id of the interface appended (%4 for me on en0), the socket connects successfully and doesn't throw an exception.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
You might have to try this with several configurations. For me this happens reliably on my wireless card (scope id %4), and works correctly on my wired card (scope id %13).
1. Stage an host with only an IPv6 address on a network that supports IPv6.
2. Instantiate a socket with the hostname of the target IPv6 host.
3. If you're attempting this on the correct configuration, the socket will throw a 'No Route to Host' exception even if there is a route to the host.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The socket to connect successfully. This is what happens on the same computer with python as well as web browsers (written in c, c++, and objective c). Other languages can successfully connect.
ACTUAL -
The no route to host exception throws when I'm connected on my wireless adapter (scope id %4), but not when I'm connected on my wired adapter (scope id %13). This was attempted on several other computers with identical configurations. Reportedly, the socket successfully connected when a different user attempted this on java 1.6 after failing with an identical error message on the current version of java.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
// This fails:
try {
Socket s = new Socket("your:ipv6:add:ress:here:0:39:0", 443);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
// this succeeds
try {
Socket s = new Socket("your:ipv6:add:ress:here:0:39:0%4", 443);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
OS X Yosemite: Version 10.10.4 (14E46)
EXTRA RELEVANT SYSTEM CONFIGURATION :
I'm on a network with full support for IPv6.
A DESCRIPTION OF THE PROBLEM :
Opening a socket to an IPv6-only host results in a 'No Route to Host' exception when instantiating a socket with either a host name or an IP address. I should note that I can ping the host, connect to the host with a web browser, and connect with sockets in other languages. Opening a socket with other programming languages results in a successful socket connection (tested in python). If instead of instantiating the socket with a hostname, i specify the IP address with the scope id of the interface appended (%4 for me on en0), the socket connects successfully and doesn't throw an exception.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
You might have to try this with several configurations. For me this happens reliably on my wireless card (scope id %4), and works correctly on my wired card (scope id %13).
1. Stage an host with only an IPv6 address on a network that supports IPv6.
2. Instantiate a socket with the hostname of the target IPv6 host.
3. If you're attempting this on the correct configuration, the socket will throw a 'No Route to Host' exception even if there is a route to the host.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The socket to connect successfully. This is what happens on the same computer with python as well as web browsers (written in c, c++, and objective c). Other languages can successfully connect.
ACTUAL -
The no route to host exception throws when I'm connected on my wireless adapter (scope id %4), but not when I'm connected on my wired adapter (scope id %13). This was attempted on several other computers with identical configurations. Reportedly, the socket successfully connected when a different user attempted this on java 1.6 after failing with an identical error message on the current version of java.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
// This fails:
try {
Socket s = new Socket("your:ipv6:add:ress:here:0:39:0", 443);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
// this succeeds
try {
Socket s = new Socket("your:ipv6:add:ress:here:0:39:0%4", 443);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
- duplicates
-
JDK-8200719 Cannot connect to IPv6 host when exists any active network interface without IPv6 address
- Resolved
- relates to
-
JDK-8179037 Improve IPv6 support
- Draft