Share via


SO_PORT_SCALABILITY

L’option de socket SO_PORT_SCALABILITY permet la scalabilité du port local pour un socket.

SO_PORT_SCALABILITY

0x3006

L’option de socket SO_PORT_SCALABILITY permet la scalabilité des ports locaux en permettant d’optimiser l’allocation de ports en allouant plusieurs fois des ports génériques pour différentes paires de ports d’adresse locale sur un ordinateur local.

Notes

Remarque : sur les plateformes où les SO_PORT_SCALABILITY et les SO_REUSE_UNICASTPORT sont pris en charge, préférez utiliser SO_REUSE_UNICASTPORT.

Les environnements de serveur proxy rencontrent des problèmes de scalabilité en raison d’une disponibilité limitée des ports locaux. Une façon de contourner ce problème consiste à ajouter d’autres adresses IP à l’ordinateur. Toutefois, par défaut, les ports génériques utilisés avec la fonction bind sont limités à la taille de la plage de ports dynamiques sur l’ordinateur local (jusqu’à 64 000 ports, mais généralement moins), quel que soit le nombre d’adresses IP sur l’ordinateur local. Pour contourner ce problème, l’application doit gérer son propre pool de ports avec une réservation de port ou à l’aide de l’heuristique.

Pour éviter que chaque application nécessitant une scalabilité gère son propre pool de ports et pour permettre une plus grande scalabilité tout en conservant la compatibilité des applications, Windows Server 2008 a introduit l’option de socket SO_PORT_SCALABILITY pour optimiser l’allocation de ports génériques. L’allocation de ports est optimisée en permettant à une application d’allouer des ports génériques pour chaque adresse locale unique et chaque paire de ports. Par conséquent, si une machine locale a quatre adresses IP, jusqu’à 256 000 ports génériques (64 000 ports × 4 adresses IP) peuvent être alloués par les demandes de fonction de liaison générique.

Lorsque l’option de socket SO_PORT_SCALABILITY est définie sur un socket et qu’un appel à la fonction de liaison est effectué pour une adresse et un port générique spécifiés (le paramètre name est défini avec une adresse spécifique et un port de 0), Winsock alloue un port pour l’adresse spécifiée. Cette allocation sera basée sur toutes les adresses IP possibles et les ports/par adresse sur l’ordinateur local. Si un port générique est acquis à l’aide de l’option SO_PORT_SCALABILITY , ce port ne peut pas être alloué par un autre socket sans l’option SO_PORT_SCALABILITY . Cette restriction est en place pour éviter les problèmes de compatibilité descendante avec les applications qui supposent qu’un port local générique ne peut pas être réutilisé. Notez que cela signifie que les applications qui acquièrent un grand nombre de ports à l’aide de SO_PORT_SCALABILITY peuvent affamer les applications héritées de ports. Si tous les ports éphémères disponibles ont été acquis pour au moins une adresse avec SO_PORT_SCALABILITY , aucune allocation de port générique n’est possible sans l’option socket.

Pour avoir un effet quelconque, l’option SO_PORT_SCALABILITY doit être définie avant que la fonction de liaison soit appelée. Vous trouverez ci-dessous un exemple d’utilisation de ce paramètre sur un ordinateur avec deux adresses :

  • La fonction socket est appelée par un processus pour créer un socket.
  • La fonction setsockopt est appelée pour activer l’option de socket SO_PORT_SCALABILITY sur le socket nouvellement créé.
  • La fonction bind est appelée pour effectuer une liaison sur l’une des adresses IP et le port 0 de l’ordinateur local.
  • La fonction connect est ensuite appelée pour se connecter à une adresse IP distante. Le socket est utilisé par l’application en fonction des besoins.
  • Une fonction socket est appelée par le même processus (éventuellement un thread différent) pour créer un deuxième socket.
  • La fonction setsockopt est appelée pour activer l’option de socket SO_PORT_SCALABILITY sur le deuxième socket nouvellement créé.
  • La fonction de liaison est appelée avec la deuxième adresse IP et le port 0 de l’ordinateur local. Même lorsque tous les ports ont été précédemment alloués, cet appel réussit, car plusieurs adresses IP sont disponibles sur l’ordinateur local et l’option de socket SO_PORT_SCALABILITY a été définie sur les deux sockets dans le même processus.
  • La fonction connect est ensuite appelée pour se connecter à une adresse IP distante. Le deuxième socket est utilisé par l’application en fonction des besoins.

Spécifications

Condition requise Valeur
Client minimal pris en charge
Aucun pris en charge
Serveur minimal pris en charge
Windows Server 2008 [applications de bureau uniquement]
En-tête
Ws2def.h

Voir aussi

getsockopt

setockopt

SOL_SOCKET Socket Options

Socket Options