Почему Eclipse так долго подключается к процессу JUnitRunner, когда включен IPv6?

Когда на моем компьютере включен 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 попробовать IPv6 ::1 первый.

Поскольку JUnitRunner не прослушивает какой-либо IPv6-адрес, ОС должна отклонять попытки подключения с помощью TCP RST (или может быть ICMP "Порт недоступен", если он правильно защищен брандмауэром). Однако у вас, вероятно, есть конфигурация брандмауэра, которая молча отбрасывает такие попытки, что означает, что клиент (Eclipse) будет ожидать ответа, который никогда не отправляется.

Сначала проверьте конфигурацию брандмауэра (ip6tables) - нет никаких причин для этого каким-либо образом блокировать петлевые соединения. Тест с брандмауэром временно отключен. Если ничего не помогает, проверьте, можно ли настроить Eclipse для использования 127.0.0.1 или JUnit можно настроить для прослушивания как IPv6, так и IPv4.

Другие вопросы по тегам