Почему 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.