
當我的電腦上啟用 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。