Partager via


Création et liaison de sockets SAN

Si le commutateur Windows Sockets détermine qu’il peut acheminer des données via une connexion SAN plutôt que via la pile TCP/IP, il demande au fournisseur de services SAN approprié de créer, lier et définir des options pour un socket sur lequel les données peuvent être transférées.

Le socket créé par le fournisseur de services SAN est un compagnon du socket créé par le fournisseur de services TCP/IP à la demande de l’application, depuis ou vers lequel les données sont transférées. Le socket complémentaire créé par le fournisseur de services SAN a les mêmes options que le socket créé par le fournisseur de services TCP/IP, si le fournisseur de services SAN prend en charge ces options.

Le socket complémentaire a également la même adresse IP et le même port TCP que le socket créé par le fournisseur de services TCP/IP. Les données SAN sont transférées via le socket complémentaire créé par le fournisseur de services SAN plutôt que par le socket créé par le fournisseur de services TCP/IP. Le socket SAN n’est pas visible par l’application. Du point de vue de l’application, les données sont transférées sur le socket qu’elle a demandé à créer pour le transfert de données.

Note Le commutateur utilise toujours le fournisseur de services TCP/IP pour transférer des données sur des sockets bruts. Le commutateur ne demande donc jamais à un fournisseur de services SAN de créer un socket brut.

La figure suivante montre une vue d’ensemble de la façon dont le commutateur Windows Sockets crée un socket complémentaire. La séquence dans les sections qui suivent décrivent plus en détail la création d’un socket complémentaire.

Diagramme montrant une vue d’ensemble de la façon dont le commutateur Windows Sockets crée un socket complémentaire.

Lancement de la création d’un socket TCP/IP

  1. Une fois que le commutateur Windows Sockets reçoit un appel WSPSocket lancé par une application, le commutateur appelle la fonction WSPSocket du fournisseur TCP/IP pour demander au fournisseur TCP/IP de créer un socket.

  2. Le commutateur Windows Sockets retourne le descripteur du socket créé à l’application et stocke ce descripteur dans une structure de données privée associée au socket.

    Du point de vue de l’application, le socket créé par le fournisseur TCP/IP est le socket utilisé pour les transferts de données, que le commutateur utilise le fournisseur de services TCP/IP ou le fournisseur de services SAN pour transférer les données.

Liaison d’un socket TCP/IP

  1. Le commutateur reçoit un appel WSPBind si une application demande à lier le socket à un contrôleur d’interface réseau (NIC) spécifique ou à l’adresse IP générique (0.0.0.0). Un socket lié à l’adresse IP générique peut écouter les demandes de connexion entrantes provenant de toutes les cartes réseau.

    Note À compter de Windows Vista, l’adresse IP générique 0.0.0.0 n’est pas disponible. À compter de Windows Vista, si la clé de Registre IPAutoconfigurationEnabled est définie sur la valeur 0, l’attribution automatique d’adresse IP est désactivée et aucune adresse IP n’est affectée. Dans ce cas, l’outil en ligne de commande ipconfig n’affiche pas d’adresse IP. Si la clé est définie sur une valeur différente de zéro, une adresse IP est automatiquement affectée. Cette clé peut se trouver dans les chemins d’accès suivants dans le Registre :

    HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\IPAutoconfigurationEnabled

    HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\Interfaces\GUID\IPAutoconfigurationEnabled

  2. Le commutateur transfère cet appel au fournisseur de services TCP/IP en appelant la fonction WSPBind du fournisseur TCP/IP.

Détermination du fournisseur de services

  1. Le commutateur détermine s’il faut utiliser un fournisseur de services SAN pour le transfert de données sur un socket après que l’application a lancé un appel WSPListen ou WSPConnect au commutateur, comme décrit dans Configuration d’une connexion SAN.

  2. Si le commutateur détermine qu’il ne peut pas utiliser un fournisseur de services SAN pour un transfert de données, le commutateur achemine le transfert de données via le fournisseur de services TCP/IP.

  3. Si le commutateur choisit un fournisseur de services SAN pour traiter le socket d’une application, le commutateur appelle la fonction WSPSocket du fournisseur de services SAN pour créer un socket complémentaire.

Lancement de la création d’un socket compagnon

  1. La fonction WSPSocket du fournisseur de services SAN initialise une structure de données interne dans laquelle elle stocke des informations sur le socket complémentaire.

  2. La fonction WSPSocket du fournisseur de services SAN doit ensuite appeler la fonction WPUCreateSocketHandle pour acquérir un descripteur de socket à partir du commutateur.

  3. Le fournisseur de services SAN doit stocker le descripteur de socket du commutateur dans sa structure de données interne pour le socket complémentaire et doit retourner son propre descripteur pour le socket complémentaire afin d’effectuer l’appel WSPSocket . Le descripteur de socket retourné par le fournisseur de services SAN peut être n’importe quelle valeur significative, telle qu’un pointeur vers une structure de données privée.

  4. Pour effectuer une opération sur le socket, le commutateur fournit le descripteur de socket qui a été retourné par le fournisseur de services SAN à la fonction appropriée du fournisseur de services SAN. De même, le fournisseur de services SAN doit fournir le descripteur de socket qui a été acquis à partir du commutateur dans l’appel WPUCreateSocketHandle si le fournisseur de services SAN effectue l’un des appels de suivi :

    WPUQuerySocketHandleContext

    WPUCloseSocketHandle

    WPUCompleteOverlappedRequest

Liaison d’un socket compagnon

  1. Si la fonction WSPSocket d’un fournisseur de services SAN se termine correctement, le commutateur appelle immédiatement la fonction WSPBind du fournisseur de services SAN pour affecter une adresse IP locale et un port TCP au socket.

  2. Le commutateur affecte la même adresse IP et le même port TCP au socket SAN que celui qui a été attribué au socket créé par le fournisseur TCP/IP. Le fournisseur de services SAN doit traduire cette adresse TCP/IP dans son format natif.

  3. Le commutateur fournit une adresse IP complète et un port TCP (c’est-à-dire des valeurs différentes de zéro) à la fonction WSPBind du fournisseur de services SAN, sauf si une application demande à écouter les connexions entrantes de toutes les cartes réseau. Dans le cas ultérieur, le commutateur fournit l’adresse IP générique à la fonction WSPBind du fournisseur de services SAN.

Définition des options d’un socket compagnon

  • Si l’application a spécifié des options de socket, le commutateur stocke ces options. Après avoir créé le socket SAN, le commutateur appelle la fonction WSPSetSockOpt du fournisseur de services SAN pour chaque option prise en charge qui a été spécifiée par l’application afin de définir immédiatement ces options pour le socket SAN.

Échec d’un appel de socket compagnon

  • Si un fournisseur de services SAN échoue à l’un des appels précédents à ses fonctions WSPSocket, WSPBind ou WSPSetSockOpt , le commutateur appelle la fonction WSPCloseSocket du fournisseur de services SAN pour détruire le socket SAN. Le commutateur utilise ensuite le fournisseur TCP/IP pour poursuivre la maintenance du socket d’application. Notez qu’une fois que le commutateur a établi une connexion à l’aide d’un fournisseur de services SAN, le commutateur ne peut pas utiliser le fournisseur TCP/IP pour traiter le socket de l’application. Dans ce cas, le commutateur retourne l’erreur appropriée à l’application.

Connexion du socket companion

  • Une fois le commutateur configuré le socket complémentaire, le commutateur appelle la fonction WSPListen ou WSPConnect pour que le fournisseur de services SAN effectue l’opération qui a provoqué la configuration initiale du socket par le fournisseur de services SAN. Par exemple, si une application a initialement demandé d’écouter les connexions entrantes, le commutateur appelle la fonction WSPListen du fournisseur de services SAN.