PFN_WSK_ACCEPT_EVENT función de devolución de llamada (wsk.h)

La función de devolución de llamada de eventos WskAcceptEvent notifica a una aplicación WSK que se ha aceptado una conexión entrante en un socket de escucha.

Sintaxis

PFN_WSK_ACCEPT_EVENT PfnWskAcceptEvent;

NTSTATUS PfnWskAcceptEvent(
  [in, optional] PVOID SocketContext,
  [in]           ULONG Flags,
  [in]           PSOCKADDR LocalAddress,
  [in]           PSOCKADDR RemoteAddress,
  [in, optional] PWSK_SOCKET AcceptSocket,
  [out]          PVOID *AcceptSocketContext,
  [out]          const WSK_CLIENT_CONNECTION_DISPATCH **AcceptSocketDispatch
)
{...}

Parámetros

[in, optional] SocketContext

Puntero al contexto de socket para el socket de escucha en el que se aceptó la conexión entrante. La aplicación WSK proporcionó este puntero al subsistema WSK cuando llamó a la función WskSocket para crear el socket de escucha.

[in] Flags

Valor de ULONG que contiene la marca siguiente o cero:

WSK_FLAG_AT_DISPATCH_LEVEL

El subsistema WSK llamó a la función de devolución de llamada de eventos WskAcceptEvent en IRQL = DISPATCH_LEVEL. Si no se establece esta marca, el subsistema WSK podría haber llamado a la función de devolución de llamada de eventos WskAcceptEvent en cualquier IRQL <= DISPATCH_LEVEL.

[in] LocalAddress

Puntero a un búfer que contiene la dirección de transporte local en la que llegó la conexión entrante. El búfer contiene el tipo de estructura SOCKADDR específico que corresponde a la familia de direcciones que la aplicación WSK especificó al crear el socket de escucha.

[in] RemoteAddress

Puntero a un búfer que contiene la dirección de transporte remota desde la que se originó la conexión entrante. El búfer contiene el tipo de estructura SOCKADDR específico que corresponde a la familia de direcciones que la aplicación WSK especificó al crear el socket de escucha.

[in, optional] AcceptSocket

Puntero a una estructura WSK_SOCKET que es el objeto de socket para el socket aceptado. Si este puntero es NULL, el socket de escucha ya no es funcional y la aplicación WSK debe llamar a la función WskCloseSocket para cerrar el socket de escucha lo antes posible.

[out] AcceptSocketContext

Puntero a una variable que recibe un puntero a un contexto proporcionado por la aplicación WSK para el socket que se acepta. El subsistema WSK pasa este puntero a las funciones de devolución de llamada de eventos del socket aceptado. La información de contexto es opaca para el subsistema WSK y debe almacenarse en memoria no paginada. Si la aplicación WSK no habilitará ninguna función de devolución de llamada de eventos en el socket aceptado, la aplicación debe establecer la variable a la que apunta el parámetro AcceptSocketContext en NULL.

[out] AcceptSocketDispatch

Puntero a una variable que recibe un puntero a una constante WSK_CLIENT_CONNECTION_DISPATCH estructura. Esta estructura es una tabla de distribución que contiene punteros a las funciones de devolución de llamada de eventos para el socket aceptado. Si la aplicación WSK no habilitará todas las funciones de devolución de llamada de eventos para el socket aceptado, la aplicación debe establecer los punteros de la tabla de distribución en NULL para esas funciones de devolución de llamada de eventos que no habilite. Si la aplicación WSK no habilitará ninguna función de devolución de llamada de eventos en el socket aceptado, debe establecer la variable a la que apunta el parámetro AcceptSocketDispatch en NULL.

Valor devuelto

Una función de devolución de llamada de eventos WSKAcceptEvent de una aplicación WSK puede devolver uno de los siguientes códigos NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS
La aplicación WSK aceptó la conexión entrante.
STATUS_REQUEST_NOT_ACCEPTED
La aplicación WSK rechazó la conexión entrante. Si se devuelve este valor, el subsistema WSK cerrará el socket aceptado en nombre de la aplicación WSK.

Comentarios

El subsistema WSK llama a la función de devolución de llamada de eventos WskAcceptEvent de una aplicación WSK cuando se acepta una conexión entrante en el socket de escucha solo si la función de devolución de llamada de eventos se ha habilitado anteriormente con la opción de socket SO_WSK_EVENT_CALLBACK . Para obtener más información sobre cómo habilitar las funciones de devolución de llamada de eventos de un socket, consulte Habilitación y deshabilitación de funciones de devolución de llamada de eventos.

Si la función de devolución de llamada de eventos WskAcceptEvent de una aplicación WSK está habilitada en un socket de escucha y la aplicación tiene una llamada pendiente a la función WskAccept en el mismo socket de escucha, entonces, cuando llega una conexión entrante, la llamada pendiente a WskAccept tiene prioridad sobre la función de devolución de llamada de eventos WskAcceptEvent . El subsistema WSK llama a la función de devolución de llamada de eventos WskAcceptEvent de la aplicación solo si no hay ningún IRP en cola de llamadas pendientes a la función WskAccept . Sin embargo, una aplicación WSK no debe suponer que el subsistema WSK no llamará a la función de devolución de llamada de eventos WskAcceptEvent de la aplicación para un socket de escucha que tenga una llamada pendiente a la función WskAccept . Las condiciones de carrera existen donde el subsistema WSK todavía podría llamar a la función de devolución de llamada de eventos WskAcceptEvent de la aplicación WSK para el socket. La única manera de que una aplicación WSK asegúrese de que el subsistema WSK no llamará a la función de devolución de llamada de eventos WskAcceptEvent de la aplicación para un socket de escucha es deshabilitar la función de devolución de llamada de eventos WskAcceptEvent de la aplicación en el socket.

Cuando el subsistema WSK llama a la función de devolución de llamada de eventos WSKAcceptEvent de una aplicación WSK, todas las funciones de devolución de llamada de eventos del socket aceptado están deshabilitadas de forma predeterminada. Si una aplicación WSK habilita cualquiera de las funciones de devolución de llamada de eventos de socket orientado a la conexión en un socket de escucha, esas funciones de devolución de llamada de eventos se habilitarán de forma predeterminada en todos los sockets orientados a la conexión que se aceptan en ese socket de escucha. Para obtener más información sobre cómo habilitar cualquiera de las funciones de devolución de llamada de eventos del socket aceptado, consulte Habilitación y deshabilitación de funciones de devolución de llamada de eventos.

Las estructuras SOCKADDR a las que apuntan los parámetros LocalAddress y RemoteAddress son válidas solo durante la llamada a la función de devolución de llamada de evento WskAcceptEvent . Si una aplicación WSK necesita estas direcciones de transporte más adelante, puede copiar el contenido de estas estructuras en sus propias estructuras SOCKADDR antes de volver de la función de devolución de llamada de eventos WskAcceptEvent , o puede llamar posteriormente a las funciones WskGetLocalAddress y WskGetRemoteAddress en el socket aceptado.

El subsistema WSK asigna la memoria para la estructura de objetos de socket ( WSK_SOCKET) para la conexión aceptada en nombre de la aplicación WSK. El subsistema WSK desasigna esta memoria cuando se cierra el socket.

El subsistema WSK llama a la función de devolución de llamada de eventos WSKAcceptEvent de una aplicación WSK en IRQL <= DISPATCH_LEVEL.

La función de devolución de llamada de eventos WSKAcceptEvent de una aplicación WSK no debe esperar a que se completen otras solicitudes de WSK en el contexto de las funciones de devolución de llamada de eventos o finalización de WSK. La devolución de llamada puede iniciar otras solicitudes de WSK (suponiendo que no pasa demasiado tiempo en DISPATCH_LEVEL), pero no debe esperar a su finalización incluso cuando se llama a la devolución de llamada en IRQL = PASSIVE_LEVEL.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Windows
Encabezado wsk.h (incluya Wsk.h)
IRQL <= DISPATCH_LEVEL

Consulte también

SOCKADDR

WSK_CLIENT_CONNECTION_DISPATCH

WSK_CLIENT_LISTEN_DISPATCH

WSK_SOCKET

WskAccept

WskCloseSocket

WskControlSocket

WskGetLocalAddress

WskGetRemoteAddress

WskSocket