Поделиться через


Общий доступ к адресам транспорта

В большинстве случаев приложение Winsock Kernel (WSK) не может привязать сокет к локальному адресу транспорта, который уже используется другим сокетом. Приложения WSK могут использовать параметры сокета SO_EXCLUSIVEADDRUSE и SO_REUSEADDR для управления общим доступом к локальному транспортному адресу, к которому привязан сокет. Ни один из этих параметров сокета по умолчанию не задан для сокета. Дополнительные сведения о настройке параметров сокета см. в выполнении операций управления в сокете.

В следующей таблице показан результат привязки второго сокета к локальному транспортному адресу, который уже используется другим сокетом. Варианты использования подстановочного символа и определённые случаи указывают, привязан ли сокет к универсальному локальному транспортному адресу или к конкретному локальному транспортному адресу.

Вторая привязка Первая привязка

Нет параметров сокета (по умолчанию)

SO_REUSEADDR

SO_EXCLUSIVEADDRUSE

Подстановочный знак

Специфический

Подстановочный знак

Специфический

Подстановочный знак

Специфический

Нет параметров сокета (по умолчанию)

Подстановочный знак

В ИСПОЛЬЗОВАНИИ

УСПЕХ

В ИСПОЛЬЗОВАНИИ

УСПЕХ

В использовании

УСПЕХ

Специфический

ПРОВЕРКА

В ИСПОЛЬЗОВАНИИ

ПРОВЕРКА

ОТКАЗАНО

ОТКАЗАНО

ЗАНЯТО

SO_REUSEADDR

Подстановочный знак

ОТКАЗАНО

УСПЕХ

УСПЕХ

УСПЕХ

ОТКАЗАНО

УСПЕХ

Специфический

ПРОВЕРКА

ОТКАЗАНО

УСПЕХ

УСПЕХ

ОТКАЗАНО

ОТКАЗАНО

SO_EXCLUSIVEADDRUSE

Подстановочный знак

ЗАНЯТО

Используется

В ИСПОЛЬЗОВАНИИ

В ИСПОЛЬЗОВАНИИ

ЗАНЯТО

ИСПОЛЬЗУЕТСЯ

Специфический

ПРОВЕРКА

INUSE

ПРОВЕРКА

В ИСПОЛЬЗОВАНИИ

ОТКАЗАНО

ИСПОЛЬЗУЕТСЯ

Результаты определяются следующим образом:

УСПЕХ
Операция привязки для второго сокета завершается успешно. Подсистема WSK возвращает состояние STATUS_SUCCESS.

ИСПОЛЬЗУЕТСЯ
Операция привязки во втором сокете завершается ошибкой. Подсистема WSK возвращает состояние STATUS_ADDRESS_ALREADY_EXISTS.

ОТКАЗАНО
Операция привязки во втором сокете завершается ошибкой. Подсистема WSK возвращает состояние STATUS_ACCESS_DENIED.

проверка
Проверка доступа выполняется для определения успешности или сбоя операции привязки во втором сокете. Если доступ предоставлен, привязка завершается успешно, а подсистема WSK возвращает состояние STATUS_SUCCESS. Если доступ запрещен, привязка завершается ошибкой, и подсистема WSK возвращает состояние STATUS_ACCESS_DENIED.

В случаях, определенных в предыдущей таблице, где выполняется проверка доступа, контекст безопасности второго сокета проверяется на дескриптор безопасности первого сокета.

  • Контекст безопасности сокета определяется параметрами OwningProcess и OwningThread, которые передаются в функцию WskSocket или функцию WskSocketConnect при создании сокета. Если при создании сокета не указан определенный процесс или поток, используется контекст безопасности процесса, создавшего сокет.

  • Дескриптор безопасности сокета задается параметром SecurityDescriptor, который передается в функцию WskSocket или функцию WskSocketConnect при создании сокета. Если определенный дескриптор безопасности не указан, подсистема WSK использует дескриптор безопасности по умолчанию, который не разрешает общий доступ к адресам транспорта. Дескриптор безопасности также можно применить к сокету после его создания с помощью параметра SO_WSK_SECURITY.

Если два сокета привязаны к двум разным определенным локальным адресам транспорта, общий доступ к обоим транспортным адресам отсутствует. В этой ситуации вторая операция привязки всегда завершится успешно.