Создание сокета IPv6 - PullRequest
3 голосов
/ 14 июня 2011

Я реализую режим двойного стека для поддержки IPv4 и IPv6. Если я создаю сокет IPv6 и слушаю его, будет ли он также принимать соединение от сокета IPv4 ??

Ответы [ 3 ]

3 голосов
/ 14 июня 2011

Да, если операционная система не настроена иначе, например, net.ipv6.bindv6only=1 в Linux, или вы установили опцию IPV6_V6ONLY socket.

2 голосов
/ 14 июня 2011

Только если система имеет реализацию dual-stack . Большинство современных систем это делают, но старые версии Windows и OpenBSD этого не делают. Вы не должны полагаться на это все же. Получите значение параметра сокета IPV6_V6ONLY, и если оно равно нулю, вам нужно открыть второй сокет для IPv4.

При использовании сокета с двумя стеками адреса IPv4 представляются как ::ffff:[IPv4 address]; например ::ffff:127.0.0.1 (это соответствует ::ffff:7f00:1; просто для удобства чтения он обычно печатается в десятичном формате).

1 голос
/ 03 апреля 2012

Согласно Microsoft , по умолчанию даже в режиме двойного стека IPV6_V6ONLY установлено в false - но вы можете включить его с помощью вызова setsockopt (2). FWIW, «Старые версии» Windows (один стек) включают все еще широко используемую Windows XP (что-нибудь старше Vista).

Итак, если вы работаете в Windows, попробуйте отключить IPV6_V6ONLY и посмотреть, удастся ли это. Я не знаю, является ли это хорошим ответом для других реализаций одного стека или нет.

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