Compartir a través de


Uso compartido de direcciones de transporte

En la mayoría de las situaciones, una aplicación Winsock Kernel (WSK) no puede enlazar un socket a una dirección de transporte local que ya está en uso por otro socket. Las aplicaciones WSK pueden usar las opciones de socket SO_EXCLUSIVEADDRUSE y SO_REUSEADDR para controlar el uso compartido de la dirección de transporte local a la que está enlazado un socket. Ninguna de estas opciones de socket se establece para un socket de forma predeterminada. Para obtener más información sobre cómo establecer las opciones de socket, vea Realizar operaciones de control en un socket.

En la tabla siguiente se muestra el resultado de enlazar un segundo socket a una dirección de transporte local que ya está en uso por otro socket. Los casos comodín y Específicos especifican si el socket está enlazado a una dirección de transporte local con caracteres comodín o a una dirección de transporte local específica.

Segundo enlace Primer enlace

Sin opciones de socket (valor predeterminado)

SO_REUSEADDR

SO_EXCLUSIVEADDRUSE

Wildcard (Carácter comodín)

Específico

Wildcard (Carácter comodín)

Específico

Wildcard (Carácter comodín)

Específico

Sin opciones de socket (valor predeterminado)

Wildcard (Carácter comodín)

INUSE

CORRECTA

INUSE

CORRECTA

INUSE

CORRECTA

Específico

CHECK

INUSE

CHECK

NEGADO

NEGADO

INUSE

SO_REUSEADDR

Wildcard (Carácter comodín)

NEGADO

CORRECTA

CORRECTA

CORRECTA

NEGADO

CORRECTA

Específico

CHECK

NEGADO

CORRECTA

CORRECTA

NEGADO

NEGADO

SO_EXCLUSIVEADDRUSE

Wildcard (Carácter comodín)

INUSE

INUSE

INUSE

INUSE

INUSE

INUSE

Específico

CHECK

INUSE

CHECK

INUSE

NEGADO

INUSE

Los resultados se definen de la siguiente manera:

ÉXITO
La operación de enlace para el segundo socket se realiza correctamente. El subsistema WSK devuelve un estado de STATUS_SUCCESS.

INUSE
Se produce un error en la operación de enlace en el segundo socket. El subsistema WSK devuelve un estado de STATUS_ADDRESS_ALREADY_EXISTS.

NEGADO
Se produce un error en la operación de enlace en el segundo socket. El subsistema WSK devuelve un estado de STATUS_ACCESS_DENIED.

CHECK
Se realiza una comprobación de acceso para determinar si la operación de enlace en el segundo socket se realiza correctamente o se produce un error. Si se concede acceso, el enlace se realiza correctamente y el subsistema WSK devuelve un estado de STATUS_SUCCESS. Si se deniega el acceso, se produce un error en el enlace y el subsistema WSK devuelve un estado de STATUS_ACCESS_DENIED.

En los casos definidos en la tabla anterior donde se realiza una comprobación de acceso, el segundo contexto de seguridad del socket se comprueba con el descriptor de seguridad del primer socket.

  • El contexto de seguridad de un socket viene determinado por los parámetros OwningProcess y OwningThread que se pasan a la función WskSocket o a la función WskSocketConnect cuando se crea el socket. Si no se especifica ningún proceso o subproceso específico cuando se crea el socket, se usa el contexto de seguridad del proceso que creó el socket.

  • El descriptor de seguridad de un socket se especifica mediante el parámetro SecurityDescriptor que se pasa a la función WskSocket o a la función WskSocketConnect cuando se crea el socket. Si no se especifica ningún descriptor de seguridad específico, el subsistema WSK usa un descriptor de seguridad predeterminado que no permite el uso compartido de direcciones de transporte. También se puede aplicar un descriptor de seguridad a un socket una vez creado el socket mediante la opción de socket SO_WSK_SECURITY .

Si los dos sockets están enlazados a dos direcciones de transporte locales específicas diferentes, no se comparte ninguna dirección de transporte. En esta situación, la segunda operación de enlace siempre se completará correctamente.