![啟用 IPv6 後,為什麼 Eclipse 需要很長時間才能連接到 JUnitRunner 進程?](https://rvso.com/image/1314341/%E5%95%9F%E7%94%A8%20IPv6%20%E5%BE%8C%EF%BC%8C%E7%82%BA%E4%BB%80%E9%BA%BC%20Eclipse%20%E9%9C%80%E8%A6%81%E5%BE%88%E9%95%B7%E6%99%82%E9%96%93%E6%89%8D%E8%83%BD%E9%80%A3%E6%8E%A5%E5%88%B0%20JUnitRunner%20%E9%80%B2%E7%A8%8B%EF%BC%9F.png)
當我的電腦上啟用 IPv6 時,從啟動新的 JUnit 進程到測試樹出現在 JUnit 視圖中,需要半分鐘的時間。
當我停用 IPv6 時,測試會立即出現。
我看到的是該進程已建立然後掛起。 30 多歲SocketImpl.connect()
。有了netstat
,我可以看到這樣的一行:
tcp6 0 1 fe80::xxxx:xxxx:x:51019 ::1:48469 SYN_SENT
為什麼會發生這種情況?
答案1
一種可能性:
執行程式進程僅偵聽127.0.0.1
IPv4 環回位址,但 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。