Compartilhar via


SO_PORT_SCALABILITY

A opção de soquete SO_PORT_SCALABILITY permite a escalabilidade da porta local para um soquete.

SO_PORT_SCALABILITY

0x3006

A opção de soquete SO_PORT_SCALABILITY permite que a escalabilidade da porta local permita que a alocação de porta seja maximizada alocando portas curinga várias vezes para diferentes pares de portas de endereço local em um computador local.

Comentários

Observação: em plataformas em que há suporte para SO_PORT_SCALABILITY e SO_REUSE_UNICASTPORT, prefira usar SO_REUSE_UNICASTPORT.

Os ambientes do servidor proxy têm problemas de escalabilidade devido à disponibilidade limitada da porta local. Uma maneira de contornar isso é adicionar mais endereços IP ao computador. No entanto, por padrão, as portas curinga usadas com a função de associação são limitadas ao tamanho do intervalo de portas dinâmicas no computador local (até 64 mil portas, mas geralmente menos), não importa o número de endereços IP no computador local. Contornar isso requer que o aplicativo mantenha seu próprio pool de portas com reserva de porta ou usando heurística.

Para evitar ter todos os aplicativos que exigem escalabilidade para gerenciar seu próprio pool de portas e permitir maior escalabilidade, mantendo a compatibilidade do aplicativo, o Windows Server 2008 introduziu a opção de soquete SO_PORT_SCALABILITY para ajudar a maximizar a alocação de porta curinga. A alocação de porta é maximizada permitindo que um aplicativo aloque portas curinga para cada par de portas e endereços locais exclusivos. Portanto, se um computador local tiver quatro endereços IP, até 256 mil portas curinga (portas de 64 K × 4 endereços IP) poderão ser alocadas por solicitações de função de associação curinga.

Quando a opção SO_PORT_SCALABILITY soquete é definida em um soquete e uma chamada para a função bind é feita para um endereço especificado e uma porta curinga (o parâmetro name é definido com um endereço específico e uma porta de 0), Winsock alocará uma porta para o endereço especificado. Essa alocação será baseada em todos os possíveis endereços IP e portas/por endereço no computador local. Se uma porta curinga for adquirida usando a opção SO_PORT_SCALABILITY , essa porta não poderá ser alocada por outro soquete sem a opção SO_PORT_SCALABILITY . Essa restrição está em vigor para evitar problemas de compatibilidade com versões anteriores com aplicativos que pressupõem que uma porta local curinga não pode ser reutilizado. Observe que isso significa que os aplicativos que adquirem um grande número de portas usando SO_PORT_SCALABILITY podem escavetar aplicativos herdados de portas. Se todas as portas efêmeras disponíveis tiverem sido adquiridas para pelo menos um endereço com SO_PORT_SCALABILITY , nenhuma outra alocação de porta curinga será possível sem a opção de soquete.

Para ter qualquer efeito, a opção SO_PORT_SCALABILITY deve ser definida antes que a função de associação seja chamada. Um exemplo de como isso seria usado em um computador com dois endereços é descrito abaixo:

  • A função de soquete é chamada por um processo para criar um soquete.
  • A função setsockopt é chamada para habilitar a opção de soquete SO_PORT_SCALABILITY no soquete recém-criado.
  • A função bind é chamada para fazer uma associação em um dos endereços IP do computador local e na porta 0.
  • Em seguida, a função connect é chamada para se conectar a um endereço IP remoto. O soquete é usado pelo aplicativo conforme necessário.
  • Uma função de soquete é chamada pelo mesmo processo (possivelmente um thread diferente) para criar um segundo soquete.
  • A função setsockopt é chamada para habilitar a opção de soquete SO_PORT_SCALABILITY no segundo soquete recém-criado.
  • A função bind é chamada com o segundo endereço IP e a porta 0 do computador local. Mesmo quando todas as portas foram alocadas anteriormente, essa chamada é bem-sucedida porque há vários endereços IP disponíveis no computador local e a opção de soquete SO_PORT_SCALABILITY foi definida em ambos os soquetes no mesmo processo.
  • Em seguida, a função connect é chamada para se conectar a um endereço IP remoto. O segundo soquete é usado pelo aplicativo conforme necessário.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Nenhum compatível
Servidor mínimo com suporte
Windows Server 2008 [somente aplicativos da área de trabalho]
Cabeçalho
Ws2def.h

Confira também

Getsockopt

Setsockopt

Opções de soquete SOL_SOCKET

Opções de soquete