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


Совместное использование транспортных адресов

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

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

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

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

SO_REUSEADDR

SO_EXCLUSIVEADDRUSE

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

Specific

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

Specific

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

Specific

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

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

INUSE

УСПЕШНОЕ ЗАВЕРШЕНИЕ

INUSE

УСПЕШНОЕ ЗАВЕРШЕНИЕ

INUSE

УСПЕШНОЕ ЗАВЕРШЕНИЕ

Specific

CHECK

INUSE

CHECK

ОТКАЗАНО

ОТКАЗАНО

INUSE

SO_REUSEADDR

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

ОТКАЗАНО

УСПЕШНОЕ ЗАВЕРШЕНИЕ

УСПЕШНОЕ ЗАВЕРШЕНИЕ

УСПЕШНОЕ ЗАВЕРШЕНИЕ

ОТКАЗАНО

УСПЕШНОЕ ЗАВЕРШЕНИЕ

Specific

CHECK

ОТКАЗАНО

УСПЕШНОЕ ЗАВЕРШЕНИЕ

УСПЕШНОЕ ЗАВЕРШЕНИЕ

ОТКАЗАНО

ОТКАЗАНО

SO_EXCLUSIVEADDRUSE

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

INUSE

INUSE

INUSE

INUSE

INUSE

INUSE

Specific

CHECK

INUSE

CHECK

INUSE

ОТКАЗАНО

INUSE

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

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

INUSE
Операция привязки во втором сокете завершается сбоем. Подсистема 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 .

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