Prise en charge D’ipv6
pour prendre en charge à la fois IPv4 et IPv6 sur Windows XP avec Service Pack 1 (SP1) et sur Windows Server 2003, une application doit créer deux sockets, un socket à utiliser avec IPv4 et un socket pour une utilisation avec IPv6. Ces deux sockets doivent être gérés séparément par l’application.
si un fournisseur de services TCP/IP sur Windows XP avec SP1 et sur Windows Server 2003 prend en charge l’adressage IPv4 et IPv6, il doit créer deux sockets distincts et écouter séparément sur ces sockets :
- Une fois pour IPv4.
- Une fois pour la famille d’adresses IPv6.
Windows Vista et les versions ultérieures offrent la possibilité de créer un seul socket IPv6 pouvant gérer le trafic IPv6 et IPv4. Par exemple, un socket d’écoute TCP pour IPv6 est créé, placé en mode pile double et lié au port 5001. Ce socket à double pile peut accepter les connexions des clients TCP IPv6 se connectant au port 5001 et à partir de clients TCP IPv4 se connectant au port 5001. Cette fonctionnalité permet une conception d’application considérablement simplifiée et réduit la charge de ressources requise pour la publication d’opérations sur deux sockets distincts. Toutefois, il existe des restrictions qui doivent être satisfaites pour pouvoir utiliser un socket à double pile. Pour plus d’informations, consultez sockets à double pile.
WSAEnumProtocols retourne deux structures d' _ informations WSAPROTOCOL pour chacun des types de socket pris en charge ( _ flux de chaussette, chaussette _ DGRAM, chaussette _ RAW). Le iAddressFamily doit être défini sur AF _ inet pour l’adressage IPv4 et sur AF _ inet6 pour l’adressage IPv6.
Les adresses IPv6 sont décrites dans les structures suivantes.
struct in_addr6 {
u_char s6_addr[16]; /* IPv6 address */
};
struct sockaddr_in6 {
short sin6_family; /* AF_INET6 */
u_short sin6_port; /* Transport level port number */
u_long sin6_flowinfo; /* IPv6 flow information */
struct in_addr6 sin6_addr; /* IPv6 address */
u_long sin6_scope_id; /* set of interfaces for a scope */
};
si une application utilise Windows fonctions sockets 1,1 et souhaite utiliser des adresses IPv6, elle peut continuer à utiliser toutes les anciennes fonctions qui utilisent la structure sockaddr comme l’un des paramètres (bind, connect, sendtoet recvfrom, accept, etc.). La seule modification requise consiste à utiliser sockaddr _ in6 au lieu de sockaddr _ dans.
Toutefois, les fonctions de résolution de noms (gethostbyname, gethostbyaddr, etc.) et les fonctions de conversion d’adresses (inet _ addr, inet _ NTOA) ne peuvent pas être réutilisées, car elles supposent une adresse IP d’une longueur de 4 octets. une application qui souhaite effectuer la résolution de noms et la conversion d’adresses pour les adresses IPv6 doit utiliser des fonctions spécifiques à Windows sockets 2. de nombreuses nouvelles fonctions ont été introduites pour permettre à Windows applications sockets 2 de tirer parti du protocole IPv6, y compris les fonctions getaddrinfo et getnameinfo .
pour plus d’informations sur l’activation des fonctionnalités ipv6 dans une application, consultez le Guide ipv6 pour les Applications Windows sockets.