SO_PORT_SCALABILITY

La opción de socket SO_PORT_SCALABILITY habilita la escalabilidad del puerto local para un socket.

SO_PORT_SCALABILITY

0x3006

La opción de socket SO_PORT_SCALABILITY permite la escalabilidad del puerto local al permitir que la asignación de puertos se maximice mediante la asignación de puertos comodín varias veces para diferentes pares de puertos de direcciones locales en un equipo local.

Observaciones

Nota: en las plataformas en las que se admiten SO_PORT_SCALABILITY y SO_REUSE_UNICASTPORT, prefiere usar SO_REUSE_UNICASTPORT.

Los entornos de servidor proxy tienen problemas de escalabilidad debido a la disponibilidad limitada del puerto local. Una manera de solucionar esto es agregar más direcciones IP a la máquina. Sin embargo, de forma predeterminada, los puertos comodín usados con la función de enlace están limitados al tamaño del intervalo de puertos dinámicos en el equipo local (hasta 64 000 puertos, pero normalmente menos) independientemente del número de direcciones IP en el equipo local. Esto requiere que la aplicación mantenga su propio grupo de puertos con reserva de puertos o mediante heurística.

Para evitar tener todas las aplicaciones que requieren escalabilidad, administre su propio grupo de puertos y permita una mayor escalabilidad al tiempo que se mantiene la compatibilidad de aplicaciones, Windows Server 2008 introdujo la opción de socket de SO_PORT_SCALABILITY para ayudar a maximizar la asignación de puertos comodín. La asignación de puertos se maximiza al permitir que una aplicación asigne puertos comodín para cada dirección local única y par de puertos. Por lo tanto, si una máquina local tiene cuatro direcciones IP, se pueden asignar hasta 256 K puertos comodín (64 K puertos × 4 direcciones IP) mediante solicitudes de función de enlace comodín.

Cuando la opción de socket SO_PORT_SCALABILITY se establece en un socket y se realiza una llamada a la función de enlace para una dirección especificada y un puerto comodín (el parámetro name se establece con una dirección específica y un puerto de 0), Winsock asignará un puerto para la dirección especificada. Esta asignación se basará en todas las posibles direcciones IP y puertos/por dirección en el equipo local. Si se adquiere un puerto comodín mediante la opción SO_PORT_SCALABILITY , otro socket no puede asignar ese puerto sin la opción SO_PORT_SCALABILITY . Esta restricción está implementada para evitar problemas de compatibilidad con versiones anteriores con aplicaciones que suponen que no se puede reutilizar un puerto local con caracteres comodín. Tenga en cuenta que esto significa que las aplicaciones que adquieren un gran número de puertos que usan SO_PORT_SCALABILITY pueden estrellar las aplicaciones heredadas de los puertos. Si se han adquirido todos los puertos efímeros disponibles para al menos una dirección con SO_PORT_SCALABILITY , no se pueden realizar más asignaciones de puertos comodín sin la opción socket.

Para tener cualquier efecto, la opción SO_PORT_SCALABILITY debe establecerse antes de llamar a la función de enlace . A continuación se describe un ejemplo de cómo se usaría esto en un equipo con dos direcciones:

  • Un proceso llama a la función de socket para crear un socket.
  • Se llama a la función setsockopt para habilitar la opción de socket SO_PORT_SCALABILITY en el socket recién creado.
  • Se llama a la función bind para realizar un enlace en una de las direcciones IP y el puerto 0 del equipo local.
  • A continuación, se llama a la función connect para conectarse a una dirección IP remota. La aplicación usa el socket según sea necesario.
  • El mismo proceso llama a una función de socket (posiblemente un subproceso diferente) para crear un segundo socket.
  • Se llama a la función setsockopt para habilitar la opción de socket SO_PORT_SCALABILITY en el segundo socket recién creado.
  • Se llama a la función bind con la segunda dirección IP del equipo local y el puerto 0. Incluso cuando se han asignado previamente todos los puertos, esta llamada se realiza correctamente porque hay varias direcciones IP disponibles en el equipo local y la opción de socket SO_PORT_SCALABILITY se estableció en ambos sockets en el mismo proceso.
  • A continuación, se llama a la función connect para conectarse a una dirección IP remota. La aplicación usa el segundo socket según sea necesario.

Requisitos

Requisito Value
Cliente mínimo compatible
No se admite ninguno
Servidor mínimo compatible
Windows Server 2008 [solo aplicaciones de escritorio]
Encabezado
Ws2def.h

Vea también

getsockopt

setsockopt

Opciones de socket de SOL_SOCKET

Opciones de socket