Compartir a través de


Sockets compartidos en el SPI

El uso compartido de sockets entre procesos en Windows Sockets se implementa de la siguiente manera. Un proceso de origen llama a WSPDuplicateSocket para obtener una estructura de WSAPROTOCOL_INFO especial. Usa algún mecanismo de comunicaciones entre procesos (IPC) para pasar el contenido de esta estructura a un proceso de destino. A continuación, el proceso de destino usa la estructura WSAPROTOCOL_INFO en una llamada a WSPSocket. El descriptor de socket devuelto por esta función será un descriptor de socket adicional para un socket subyacente que, por tanto, se comparte.

Es responsabilidad del proveedor de servicios realizar las operaciones necesarias en el contexto del proceso de origen y crear una estructura de WSAPROTOCOL_INFO que se reconocerá cuando aparezca posteriormente como parámetro para WSPSocket en el contexto de los procesos de destino. El miembro dwProviderReserved de la estructura WSAPROTOCOL_INFO está disponible para el uso del proveedor de servicios y se puede usar para almacenar cualquier información de contexto útil, incluido un identificador duplicado.

Este mecanismo está diseñado para ser adecuado para las versiones multiproceso y preferente de Un solo subproceso de Windows. Sin embargo, tenga en cuenta que los sockets se pueden compartir entre subprocesos en un proceso determinado sin usar la función WSPDuplicateSocket , ya que un descriptor de socket es válido en todos los subprocesos de un proceso.

Como se describe en la sección Asignación de descriptores, cuando se asignan nuevos descriptores de socket a proveedores IFS deben llamar a WPUModifyIFSHandle y los proveedores que no son IFS deben llamar a WPUCreateSocketHandle.

En la tabla siguiente se muestra un escenario posible para establecer y usar un socket compartido en modo de entrega.

Proceso de origen IPC Proceso de destino
1) WSPSocket, WSPConnect
2) Solicita el identificador de proceso de destino. ==>
3) Recibe la solicitud de identificador de proceso y responde.
4) Recibe el identificador de proceso. <==
5) Llama a WSPDuplicateSocket para obtener una estructura de WSAPROTOCOL_INFO especial.
6) Envía WSAPROTOCOL_INFO estructura al destino.
==> 7) Recibe WSAPROTOCOL_INFO estructura.
8) Llama a WSPSocket para crear un descriptor de socket compartido.
9)Usa socket compartido para el intercambio de datos.
10) WSPClosesocket <==