Opened 7 years ago
Last modified 7 years ago
#15326 new enhancement
Increase timeout when testing IPv6 connectivity
Reported by: | naoliv | Owned by: | team |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Core | Version: | |
Keywords: | ipv6 timeout | Cc: | stoecker |
Description
Could we have a higher timeout value in MainApplication.java#L1237?
1 second seems to be too low (sometimes it fails too much here to detect a valid IPv6 connection, even when I am sure that everything is OK)
I am doing some tests with 15000
without any visible startup slowdown.
Of course JOSM could/should use a lower value (3000 maybe?)
JOSM:
Build-Date:2017-09-19 10:31:24 Revision:12876 Is-Local-Build:true Identification: JOSM/1.5 (12876 SVN en) Linux Debian GNU/Linux testing (buster) Memory Usage: 839 MB / 6372 MB (482 MB allocated, but free) Java version: 1.8.0_144-8u144-b01-1-b01, Oracle Corporation, OpenJDK 64-Bit Server VM Screen: :0.0 1600x900, :0.1 1280x1024 Maximum Screen Size: 1600x1024 Java package: openjdk-8-jre:amd64-8u144-b01-1 Java ATK Wrapper package: libatk-wrapper-java:all-0.33.3-13 VM arguments: [-Dawt.useSystemAAFontSettings=on] Program arguments: [--language=en]
Attachments (0)
Change History (6)
comment:1 by , 7 years ago
Cc: | added |
---|---|
Keywords: | ipv6 timeout added |
comment:2 by , 7 years ago
comment:3 by , 7 years ago
I found people with the same problem, like in https://stackoverflow.com/questions/9922543/why-does-inetaddress-isreachable-return-false-when-i-can-ping-the-ip-address, https://stackoverflow.com/questions/4779367/problem-with-isreachable-in-inetaddress-class, etc
https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html#isReachable-int- says:
"A typical implementation will use ICMP ECHO REQUESTs if the privilege can be obtained, otherwise it will try to establish a TCP connection on port 7 (Echo) of the destination host"
I guess that it needs a privileged account to use ICMP and then falls back to a TCP connection on port 7.
Instead using isReachable()
+ an additional connection test (SSLSocketFactory.getDefault().createSocket(a, 443).close();
), doesn't it make sense to directly test with only the second part? (so we will have only one connection test, to josm.openstreetmap.de:443 using IPv6)
comment:4 by , 7 years ago
See #11452. Actually isReachable() should be enough, but it does not work (at least for Linux).
I'm not sure if dropping the correct test in favour of the workaround is really the best solution, but probably you're right ;-)
comment:5 by , 7 years ago
P.S. To more clear: isReachable() fails in the wrong direction on Linux: It reports valid IPv6 connections in cases where they don't work. The other way round would be ok with the current design to use Ipv4 when in doubt.
P.S. You can set advanced preference "prefer.ipv6" to "true" to disable the check when you are sure IPv6 works (and you don't switch to IPv4 only networks).
comment:6 by , 7 years ago
@naoliv: see also previous discussion. The proper solution would be to wait for javabug:8179037 but I have no idea how long it could take.
Actually I'd prefer a proper solution instead of adapting the hack. Otherwise I have no objections.