SO_PORT_SCALABILITY
Параметр SO_PORT_SCALABILITY сокета обеспечивает масштабируемость локального порта для сокета.
-
SO_PORT_SCALABILITY
-
-
0x3006
-
Параметр SO_PORT_SCALABILITY сокета обеспечивает масштабируемость локального порта, позволяя максимально увеличить выделение портов, выделяя порты с подстановочными знаками несколько раз для разных пар портов локального адреса на локальном компьютере.
-
Комментарии
Примечание. На платформах, где поддерживаются как SO_PORT_SCALABILITY, так и SO_REUSE_UNICASTPORT, предпочитайте использовать SO_REUSE_UNICASTPORT.
Среды прокси-сервера имеют проблемы масштабируемости из-за ограниченной доступности локальных портов. Одним из способов решения этой проблемы является добавление дополнительных IP-адресов на компьютер. Однако по умолчанию порты с подстановочными знаками, используемые с функцией привязки , ограничены размером динамического диапазона портов на локальном компьютере (до 64 000 портов, но обычно меньше) независимо от количества IP-адресов на локальном компьютере. Для обхода этого требуется, чтобы приложение поддерживало собственный пул портов либо с резервированием портов, либо с помощью эвристики.
Чтобы избежать того, чтобы каждое приложение, которому требуется масштабируемость, управляло собственным пулом портов, а также обеспечить большую масштабируемость при сохранении совместимости приложений, в Windows Server 2008 появился параметр сокета SO_PORT_SCALABILITY для максимального выделения портов с подстановочными знаками. Выделение портов максимально увеличивается, позволяя приложению выделять порты с подстановочными знаками для каждой пары уникальных локальных адресов и портов. Таким образом, если локальный компьютер имеет четыре IP-адреса, запросы функции привязки с подстановочными знаками могут выделить до 256 000 портов (64 000 портов × 4 IP-адреса).
Если параметр SO_PORT_SCALABILITY сокета задан для сокета и выполняется вызов функции bind для указанного адреса и порта с подстановочными знаками (параметр имени задается с определенным адресом и портом 0), Winsock выделяет порт для указанного адреса. Это распределение будет основываться на всех возможных IP-адресах и портах на адрес на локальном компьютере. Если порт с подстановочными знаками получается с помощью параметра SO_PORT_SCALABILITY , этот порт не может быть выделен другим сокетом без параметра SO_PORT_SCALABILITY . Это ограничение применяется, чтобы избежать проблем с обратной совместимостью с приложениями, которые предполагают, что локальный порт с подстановочными знаками нельзя использовать повторно. Обратите внимание, что это означает, что приложения, которые получают большое количество портов с помощью SO_PORT_SCALABILITY , могут голодать устаревшие приложения портов. Если все доступные временные порты были приобретены по крайней мере для одного адреса с SO_PORT_SCALABILITY , то большее выделение портов с подстановочными знаками невозможно без параметра сокета.
Чтобы иметь какой-либо эффект, необходимо задать параметр SO_PORT_SCALABILITY перед вызовом функции привязки . Ниже приведен пример использования этого метода на компьютере с двумя адресами.
- Функция сокета вызывается процессом для создания сокета.
- Функция setsockopt вызывается для включения параметра сокета SO_PORT_SCALABILITY во вновь созданном сокете.
- Функция bind вызывается для выполнения привязки к одному из IP-адресов локального компьютера и порту 0.
- Затем вызывается функция connect для подключения к удаленному IP-адресу. Сокет используется приложением по мере необходимости.
- Функция сокета вызывается тем же процессом (возможно, другим потоком) для создания второго сокета.
- Функция setsockopt вызывается для включения параметра SO_PORT_SCALABILITY сокета во вновь созданном втором сокете.
- Функция bind вызывается со вторым IP-адресом локального компьютера и портом 0. Даже если все порты были ранее выделены, этот вызов выполняется успешно, так как на локальном компьютере доступно несколько IP-адресов, а параметр SO_PORT_SCALABILITY сокета был задан для обоих сокетов в одном процессе.
- Затем вызывается функция connect для подключения к удаленному IP-адресу. Второй сокет используется приложением по мере необходимости.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Ни одна версия не поддерживается |
Минимальная версия сервера |
Windows Server 2008 [только классические приложения] |
Заголовок |
|
См. также раздел