Невозможно использовать InetAddress.isReachable (timeout) для IPv6, когда java.net.preferIPv4Stack = true - PullRequest
0 голосов
/ 05 мая 2018

В Linux я отключаю поддержку IPv6, устанавливая java.net.preferIPv4Stack = true по умолчанию, поддерживая только IPv4 в приложении.

Однако теперь я хочу достичь внешнего IPv6-IP с помощью InetAddress.isReachable (timeout), но он полностью потерпел неудачу и работает, только когда я установил java.net.preferIPv4Stack = false.

Есть ли способы достичь IPv6 IP, но при этом сохранить java.net.preferIPv4Stack = true?

Спасибо

1 Ответ

0 голосов
/ 05 мая 2018

Нет, это невозможно, поскольку установленная опция явно отключает связь только с хостами IPv6:

java.net.preferIPv4Stack (по умолчанию: false)

Если в операционной системе доступен IPv6, базовый собственный сокет будет по умолчанию сокетом IPv6, который позволяет приложениям подключаться и принимать подключения как с хостов IPv4, так и с IPv6. Однако, если приложение будет использовать сокеты только для IPv4, это свойство может быть установлено в значение true. Смысл в том, что приложение не сможет обмениваться данными только с хостами IPv6.

Если вы хотите убедиться, что адреса IPv4 предпочтительнее, чем адреса IPv6, но при этом IPv6 все еще доступен, то вам повезло - это поведение по умолчанию! (Если вы хотите изменить это значение на IPv6-адреса по любой причине, вы можете установить java.net.preferIPv6Addresses=true.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...