SO_PORT_SCALABILITY

Die Option SO_PORT_SCALABILITY Socket ermöglicht die Skalierbarkeit des lokalen Ports für einen Socket.

SO_PORT_SCALABILITY

0x3006

Die Option SO_PORT_SCALABILITY Socket ermöglicht die Skalierbarkeit des lokalen Ports, indem die Portzuordnung durch mehrfaches Zuweisen von Platzhalterports für verschiedene lokale Adressportpaare auf einem lokalen Computer maximiert werden kann.

Bemerkungen

Hinweis: Auf Plattformen, auf denen sowohl SO_PORT_SCALABILITY als auch SO_REUSE_UNICASTPORT unterstützt werden, sollten Sie lieber SO_REUSE_UNICASTPORT verwenden.

Proxyserverumgebungen weisen Aufgrund der eingeschränkten lokalen Portverfügbarkeit Skalierbarkeitsprobleme auf. Eine Möglichkeit, dies zu umgehen, besteht darin, dem Computer weitere IP-Adressen hinzuzufügen. Standardmäßig sind jedoch Platzhalterports, die mit der Bindungsfunktion verwendet werden, auf die Größe des dynamischen Portbereichs auf dem lokalen Computer beschränkt (bis zu 64.000 Ports, aber in der Regel weniger), unabhängig von der Anzahl der IP-Adressen auf dem lokalen Computer. Um dies zu umgehen, muss die Anwendung einen eigenen Portpool entweder mit Portreservierung oder mithilfe der Heuristik verwalten.

Um zu vermeiden, dass jede Anwendung, die Skalierbarkeit erfordert, einen eigenen Portpool verwaltet und eine höhere Skalierbarkeit bei gleichzeitiger Aufrechterhaltung der Anwendungskompatibilität ermöglicht, wurde in Windows Server 2008 die Option SO_PORT_SCALABILITY Socket eingeführt, um die Platzhalterportzuordnung zu maximieren. Die Portzuordnung wird maximiert, indem einer Anwendung ermöglicht wird, Platzhalterports für jede eindeutige lokale Adresse und jedes Portpaar zuzuweisen. Wenn also ein lokaler Computer über vier IP-Adressen verfügt, können bis zu 256 K-Wildcardports (64 K-Ports × 4 IP-Adressen) durch Anforderungen der Wildcard-Bindungsfunktion zugeordnet werden.

Wenn die Option SO_PORT_SCALABILITY Sockets für einen Socket festgelegt ist und ein Aufruf der Bindfunktion für eine angegebene Adresse und einen angegebenen Wildcardport erfolgt (der Name-Parameter ist mit einer bestimmten Adresse und einem Port von 0 festgelegt), weist Winsock einen Port für die angegebene Adresse zu. Diese Zuordnung basiert auf allen möglichen IP-Adressen und Ports/pro Adresse auf dem lokalen Computer. Wenn ein Wildcardport mit der Option SO_PORT_SCALABILITY abgerufen wird, kann dieser Port nicht von einem anderen Socket ohne die Option SO_PORT_SCALABILITY zugeordnet werden. Diese Einschränkung ist vorhanden, um Abwärtskompatibilitätsprobleme mit Anwendungen zu vermeiden, die davon ausgehen, dass ein lokaler Platzhalterport nicht wiederverwendet werden kann. Beachten Sie, dass dies bedeutet, dass Anwendungen, die über SO_PORT_SCALABILITY eine große Anzahl von Ports abrufen, Legacyanwendungen von Ports verhungern können. Wenn alle verfügbaren kurzlebigen Ports für mindestens eine Adresse mit SO_PORT_SCALABILITY abgerufen wurden, sind ohne die Socketoption keine Weiteren Wildcard-Portzuordnungen möglich.

Um auswirkungen zu können, muss die Option SO_PORT_SCALABILITY festgelegt werden, bevor die Bindfunktion aufgerufen wird. Ein Beispiel dafür, wie dies auf einem Computer mit zwei Adressen verwendet wird, finden Sie unten:

  • Die Socketfunktion wird von einem Prozess aufgerufen, um einen Socket zu erstellen.
  • Die setockopt-Funktion wird aufgerufen, um die Option SO_PORT_SCALABILITY Socket für den neu erstellten Socket zu aktivieren.
  • Die Bindfunktion wird aufgerufen, um eine Bindung an eine der IP-Adressen und port 0 des lokalen Computers zu erstellen.
  • Die Connect-Funktion wird dann aufgerufen, um eine Verbindung mit einer Remote-IP-Adresse herzustellen. Der Socket wird von der Anwendung nach Bedarf verwendet.
  • Eine Socketfunktion wird vom gleichen Prozess (möglicherweise ein anderer Thread) aufgerufen, um einen zweiten Socket zu erstellen.
  • Die setockopt-Funktion wird aufgerufen, um die Option SO_PORT_SCALABILITY Socket für den neu erstellten zweiten Socket zu aktivieren.
  • Die Bindfunktion wird mit der zweiten IP-Adresse des lokalen Computers und Port 0 aufgerufen. Selbst wenn zuvor alle Ports zugeordnet wurden, ist dieser Aufruf erfolgreich, da auf dem lokalen Computer mehrere IP-Adressen verfügbar sind und die SO_PORT_SCALABILITY Socketoption für beide Sockets im selben Prozess festgelegt wurde.
  • Die Connect-Funktion wird dann aufgerufen, um eine Verbindung mit einer Remote-IP-Adresse herzustellen. Der zweite Socket wird von der Anwendung nach Bedarf verwendet.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Nicht unterstützt
Unterstützte Mindestversion (Server)
Windows Server 2008 [nur Desktop-Apps]
Header
Ws2def.h

Siehe auch

getsockopt

setsockopt

SOL_SOCKET Socketoptionen

Socketoptionen