![Почему Eclipse так долго подключается к процессу JUnitRunner, если включен IPv6?](https://rvso.com/image/1314341/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20Eclipse%20%D1%82%D0%B0%D0%BA%20%D0%B4%D0%BE%D0%BB%D0%B3%D0%BE%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%BA%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D1%83%20JUnitRunner%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%20IPv6%3F.png)
Когда на моем компьютере включен IPv6, между запуском нового процесса JUnit и появлением тестового дерева в представлении JUnit проходит полминуты.
Когда я отключаю IPv6, тесты появляются сразу.
Я вижу, что процесс создается, а затем зависает примерно на 30 секунд в SocketImpl.connect()
. С netstat
, я вижу такую строку:
tcp6 0 1 fe80::xxxx:xxxx:x:51019 ::1:48469 SYN_SENT
Почему это происходит?
решение1
Одна из возможностей:
Процесс runner прослушивает только 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.