啟用 IPv6 後,為什麼 Eclipse 需要很長時間才能連接到 JUnitRunner 進程?

啟用 IPv6 後,為什麼 Eclipse 需要很長時間才能連接到 JUnitRunner 進程?

當我的電腦上啟用 IPv6 時,從啟動新的 JUnit 進程到測試樹出現在 JUnit 視圖中,需要半分鐘的時間。

當我停用 IPv6 時,測試會立即出現。

我看到的是該進程已建立然後掛起。 30 多歲SocketImpl.connect()。有了netstat,我可以看到這樣的一行:

tcp6       0      1 fe80::xxxx:xxxx:x:51019 ::1:48469               SYN_SENT

為什麼會發生這種情況?

答案1

一種可能性:

執行程式進程僅偵聽127.0.0.1IPv4 環回位址,但 Eclipse 正在嘗試連線到localhost– 可以是127.0.0.1::1,後者是 IPv6 環回。在大多數作業系統上,IPv6 已啟用,這將是首選,導致 Eclipse::1首先嘗試 IPv6。

由於 JUnitRunner 未偵聽任何 IPv6 位址,因此作業系統應拒絕嘗試使用 TCP RST(或可能如果防火牆正確的話,ICMP「連接埠無法存取」)。但是,您的防火牆配置可能會默默地丟棄此類嘗試,這表示客戶端 (Eclipse) 將等待從未發送的答案。

首先檢查您的防火牆設定 ( ip6tables) – 它沒有理由以任何方式阻止環回連線。暫時停用防火牆進行測試。如果沒有幫助,請檢查 Eclipse 是否可以設定為使用127.0.0.1,或者 JUnit 是否可以設定為同時偵聽 IPv6 和 IPv4。

相關內容