Partager via


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 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 versions ultérieures offrent la possibilité de créer un seul socket IPv6 qui peut gérer à la fois le trafic IPv6 et IPv4. Par exemple, un socket d’écoute TCP pour IPv6 est créé, placé en mode double pile et lié au port 5001. Ce socket double pile peut accepter des connexions à partir de clients TCP IPv6 qui se connectent 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 surcharge de ressources requise pour les opérations de publication sur deux sockets distincts. Toutefois, certaines restrictions doivent être respectées pour utiliser un socket à double pile. Pour plus d’informations, consultez Sockets double pile.

WSAEnumProtocols retourne deux structures WSAPROTOCOL_INFO pour chacun des types de socket pris en charge (SOCK_STREAM, SOCK_DGRAM, SOCK_RAW). L’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 des fonctions Windows Sockets 1.1 et souhaite utiliser des adresses IPv6, elle peut continuer à utiliser toutes les anciennes fonctions qui prennent la structure sockaddr comme l’un des paramètres (lier, se connecter, envoyer à et revfrom, accepter, etc.). La seule modification requise consiste à utiliser sockaddr_in6 au lieu de sockaddr_in.

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 qu’une adresse IP a 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 aux sockets Windows 2. De nombreuses nouvelles fonctions ont été introduites pour permettre aux applications Windows Sockets 2 de tirer parti d’IPv6, notamment 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 de sockets Windows.