![Warum dauert die Verbindung von Eclipse zu einem JUnitRunner-Prozess so lange, wenn IPv6 aktiviert ist?](https://rvso.com/image/1314341/Warum%20dauert%20die%20Verbindung%20von%20Eclipse%20zu%20einem%20JUnitRunner-Prozess%20so%20lange%2C%20wenn%20IPv6%20aktiviert%20ist%3F.png)
Wenn IPv6 auf meinem Computer aktiviert ist, vergeht zwischen dem Starten eines neuen JUnit-Prozesses und dem Erscheinen des Testbaums in der JUnit-Ansicht eine halbe Minute.
Wenn ich IPv6 deaktiviere, werden die Tests sofort angezeigt.
Ich sehe, dass der Prozess erstellt wird und dann ca. 30 Sekunden hängen bleibt SocketImpl.connect()
. Bei netstat
sehe ich eine Zeile wie diese:
tcp6 0 1 fe80::xxxx:xxxx:x:51019 ::1:48469 SYN_SENT
Warum passiert das?
Antwort1
Eine Möglichkeit:
Der Runner-Prozess hört nur auf 127.0.0.1
, der IPv4-Loopback-Adresse, aber Eclipse versucht, eine Verbindung herzustellen – was entweder oder localhost
sein kann , wobei letzteres ein IPv6-Loopback ist. Auf den meisten Betriebssystemen ist IPv6 aktiviert, es wird bevorzugt, sodass Eclipse zuerst IPv6 probiert .127.0.0.1
::1
::1
Da JUnitRunner keine IPv6-Adressen abhört, sollte das Betriebssystem Verbindungsversuche mit einem TCP RST ablehnen (odervielleichtICMP „Port nicht erreichbar“, wenn die Firewall ordnungsgemäß geschützt ist. Allerdings verfügen Sie wahrscheinlich über eine Firewall-Konfiguration, die solche Versuche stillschweigend verwirft, was bedeutet, dass der Client (Eclipse) auf eine Antwort wartet, die nie gesendet wird.
Überprüfen Sie zunächst Ihre Firewall-Konfiguration ( ip6tables
) – es gibt keinen Grund, warum sie Loopback-Verbindungen in irgendeiner Weise blockieren sollte. Testen Sie mit vorübergehend deaktivierter Firewall. Wenn das alles nicht hilft, prüfen Sie, ob Eclipse so konfiguriert werden kann, dass es verwendet wird 127.0.0.1
, oder ob JUnit so konfiguriert werden kann, dass es sowohl auf IPv6 als auch auf IPv4 lauscht.