IPv6 на уровне программирования в Windows - PullRequest
7 голосов
/ 11 апреля 2011

В чем разница между IPv6 и IPv4 на уровне программирования в Windows?

Можем ли мы просто изменить IPv4-адрес на IPV6 и оставить все остальные программы такими же, будет ли он работать?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Спецификация IPv6 (RFC 3493) определяет некоторые новые методы API и структуры данных.Microsoft внедрила раннюю версию API (RFC 2553) в Windows, поэтому есть некоторые различия.Эта ссылка описывает различия и описание того, какие API поддерживаются в какой версии Windows:

http://tdistler.com/2011/02/28/cross-platform-ipv6-socket-programming

2 голосов
/ 11 апреля 2011

Это действительно зависит от того, что делает ваша программа.

Адрес IPV6 занимает 16 байтов, а не четыре, используемые IPV4. Строковые представления также различны.

Для создания сокета это практически тоже самое:

            sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

Просто измените PF_INET на PF_INET6.

Подключение немного отличается:

            nRet = connect(sock, 
                           reinterpret_cast<SOCKADDR *>(&SockAddr), 
                           sizeof(SockAddr));

В IPV4 SockAddr - это структура sockaddr_in, в IPV6 - это sockaddr_in6.

Вы должны использовать что-то вроде getaddrinfo () для инициализации SockAddr, так как gethostbyname () не работает для IPV6.

bind (), listen () и accept () больше похожи. После установки сокета чтение, запись и т. Д. Не зависят от версии IP.

Если вы работаете на более высоком уровне (например, HTTP), ваша программа не должна нуждаться в каких-либо изменениях, но может потребоваться ссылка на разные библиотеки.

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