当我的计算机上启用 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 已启用,因此会优先使用 IPv6,这导致 Eclipse 会::1
首先尝试 IPv6。
由于 JUnitRunner 没有监听任何 IPv6 地址,因此操作系统应该拒绝使用 TCP RST(或或许ICMP“端口不可达”(如果防火墙设置正确)。但是,您的防火墙配置可能会默默地丢弃此类尝试,这意味着客户端(Eclipse)将等待永远不会发送的回复。
首先检查您的防火墙配置(ip6tables
)——它没有理由以任何方式阻止环回连接。暂时禁用防火墙进行测试。如果没有任何帮助,请检查是否可以将 Eclipse 配置为使用127.0.0.1
,或者是否可以将 JUnit 配置为同时监听 IPv6 和 IPv4。