Compartir a través de


Uso de funciones de kernel de Winsock frente a funciones de devolución de llamada de eventos

Para determinadas operaciones de socket, una aplicación de Winsock Kernel (WSK) puede llamar a una de las funciones WSK del socket para realizar la operación o implementar y habilitar una función de devolución de llamada de eventos en el socket al que llama el subsistema WSK cuando se produce el evento asociado a la operación. Por ejemplo, al recibir datos en un socket orientado a la conexión, una aplicación WSK puede realizar llamadas a la función WskReceive del socket o implementar y habilitar una función de devolución de llamada de eventos WskReceiveEvent en el socket. Los requisitos de una aplicación WSK dictan qué método debe usar la aplicación. En la documentación de WSK se proporcionan ejemplos de cómo usar ambos métodos.

En las listas siguientes se resumen algunos puntos clave para cada método.

Uso de funciones de kernel de Winsock

  • La aplicación WSK controla las operaciones de socket, lo que significa que la aplicación WSK controla cuándo se producen las operaciones de socket. Esto puede simplificar la sincronización requerida por la aplicación WSK.

  • La aplicación WSK proporciona IRP a las funciones de socket. El subsistema WSK pone en cola estos IRP hasta que se completa la operación de socket. Para obtener más información sobre el uso de IRP con funciones WSK, consulte Uso de IRP con funciones del kernel de Winsock.

  • La aplicación WSK puede realizar operaciones de socket de bloqueo esperando al IRP para que el subsistema WSK complete cada operación.

  • Es posible que la aplicación WSK necesite mantener en cola varias operaciones de socket en algunas situaciones con el fin de garantizar la transferencia de datos de alto rendimiento en sockets orientados a la conexión, para evitar que los datagramas entrantes se quiten en sockets de datagrama o para evitar que las conexiones entrantes se quiten en sockets de escucha.

  • La aplicación WSK proporciona los búferes de datos para las operaciones de transferencia de datos. Esto reduce el número de veces que es posible que los datos deban copiarse. Sin embargo, si una aplicación WSK mantiene en cola varias operaciones de transferencia de datos, la aplicación debe proporcionar búferes de datos al subsistema WSK para cada operación de transferencia de datos en cola. Por lo tanto, la aplicación WSK puede requerir recursos de memoria adicionales.

Uso de funciones de devolución de llamada de eventos

  • El subsistema WSK controla las operaciones de socket, lo que significa que el subsistema WSK notifica a la aplicación WSK de los eventos del socket mediante una llamada a las funciones de devolución de llamada de eventos del socket. La aplicación WSK puede requerir una sincronización más compleja para controlar la naturaleza asincrónica de las funciones de devolución de llamada de eventos.

  • La aplicación WSK no usa IRP para las operaciones de socket.

  • La aplicación WSK no necesita poner en cola las operaciones de socket. El subsistema WSK llama a las funciones de devolución de llamada de eventos de la aplicación WSK tan pronto como se produzcan los eventos del socket. Si la aplicación WSK puede mantenerse al día con la velocidad a la que se llaman las funciones de devolución de llamada de eventos de un socket, el uso de funciones de devolución de llamada de eventos podría proporcionar el mayor rendimiento y la menor probabilidad de quitar datagramas o conexiones entrantes.

  • El subsistema WSK proporciona los búferes de datos para las operaciones de transferencia de datos. La aplicación WSK debe liberar estos búferes de datos de nuevo al subsistema WSK de inmediato o dentro de un período de tiempo razonable, de modo que el subsistema WSK no se quede sin recursos de memoria. Por lo tanto, es posible que la aplicación WSK necesite copiar los datos de los búferes de datos que pertenecen al subsistema WSK en sus propios búferes de datos.

Nota Las listas anteriores no son necesariamente exhaustivas. Puede haber otros puntos que se deben tener en cuenta al elegir qué método es la mejor opción para una aplicación WSK determinada.