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