为什么启用 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 已启用,因此会优先使用 IPv6,这导致 Eclipse 会::1首先尝试 IPv6。

由于 JUnitRunner 没有监听任何 IPv6 地址,因此操作系统应该拒绝使用 TCP RST(或或许ICMP“端口不可达”(如果防火墙设置正确)。但是,您的防火墙配置可能会默默地丢弃此类尝试,这意味着客户端(Eclipse)将等待永远不会发送的回复。

首先检查您的防火墙配置(ip6tables)——它没有理由以任何方式阻止环回连接。暂时禁用防火墙进行测试。如果没有任何帮助,请检查是否可以将 Eclipse 配置为使用127.0.0.1,或者是否可以将 JUnit 配置为同时监听 IPv6 和 IPv4。

相关内容