Warum dauert die Verbindung von Eclipse zu einem JUnitRunner-Prozess so lange, wenn IPv6 aktiviert ist?

Warum dauert die Verbindung von Eclipse zu einem JUnitRunner-Prozess so lange, wenn IPv6 aktiviert ist?

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 netstatsehe 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 localhostsein 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.

verwandte Informationen