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

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

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

Связанный контент