Общий доступ к адресам транспорта
В большинстве случаев приложение 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.
Если два сокета привязаны к двум разным определенным локальным адресам транспорта, общий доступ к обоим транспортным адресам отсутствует. В этой ситуации вторая операция привязки всегда завершится успешно.