Цель состоит в том, чтобы иметь два варианта:
- Отдельные сокеты для IPv4 и IPv6 — я хочу контролировать могу ли я открыть отдельные сокеты для IPv4 и IPv6 (например, один DatagramChannel для IPv4 и другой для IPv6, каждый из которых привязан к одному и тому же порту).
- Двухрежимный сокет IPv6 — я хочу использовать один сокет IPv6, который может принимать пакеты как IPv4, так и IPv6, имитируя поведение флага IPV6_ONLY в BSD, который ограничивает прием только сокета IPv6. Пакеты IPv6.
Код: Выделить всё
// Opening IPv4 DatagramChannel
DatagramChannel ipv4Channel = DatagramChannel.open(StandardProtocolFamily.INET);
ipv4Channel.bind(new InetSocketAddress(port));
// Opening IPv6 DatagramChannel
DatagramChannel ipv6Channel = DatagramChannel.open(StandardProtocolFamily.INET6);
ipv6Channel.bind(new InetSocketAddress(port));
Мне нужна возможность:
- Откройте отдельные сокеты для IPv4 и IPv6 на одном и том же порту (как для DatagramChannel, так и, возможно, для ServerSocketChannel или SocketChannel).
- Настройте сокет IPv6 для принять оба пакеты IPv4 и IPv6 (например, флаг BSD IPV6_ONLY) и переключать его поведение между приемом только пакетов IPv6 или двойным режимом (IPv4/IPv6).
- Открыть отдельные сокеты IPv4 и IPv6 на одном и том же порту (не обнаруживая «порт, уже используемый» ошибка)?
- Настроить сокет IPv6 для приема пакетов IPv4 и IPv6 или реализовать поведение, аналогичное флагу BSD IPV6_ONLY?
Некоторые другие разговоры из прошлого на те же темы от я:
- Настройка каналов Java NIO для IPv4 и IPv6 отдельно
- Канал Java NIO DatagramChannel: невозможно открыть несколько сокетов на Один и тот же порт с IPv4 и IPv6
Подробнее здесь: https://stackoverflow.com/questions/792 ... ly-flag-in