Compartir a través de


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

La función WskCloseSocket cierra un socket y libera los recursos asociados.

Sintaxis

PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;

NTSTATUS PfnWskCloseSocket(
  [in]      PWSK_SOCKET Socket,
  [in, out] PIRP Irp
)
{...}

Parámetros

[in] Socket

Puntero a una estructura WSK_SOCKET que especifica el objeto de socket para el socket que se está cerrando.

[in, out] Irp

Puntero a un IRP asignado por el autor de la llamada que usa el subsistema WSK para completar la operación de cierre de forma asincrónica. Para obtener más información sobre el uso de IRP con funciones WSK, consulte Uso de IRP con funciones del kernel de Winsock.

Valor devuelto

WskCloseSocket devuelve uno de los siguientes códigos NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS
El socket se cerró correctamente. El IRP se completará con el estado correcto.
STATUS_PENDING
El subsistema WSK no pudo cerrar el socket inmediatamente. El subsistema WSK completará el IRP después de cerrar el socket. El estado de la operación de cierre se devolverá en el campo IoStatus.Status del IRP.
Otros códigos de estado
Se produjo un error. El IRP se completará con el estado de error.

Comentarios

Antes de llamar a la función WskCloseSocket , una aplicación WSK debe asegurarse de que no haya otras llamadas de función en curso a ninguna de las funciones del socket, incluidas las funciones de extensión, en cualquiera de los demás subprocesos de la aplicación. Por ejemplo, una aplicación WSK no debe llamar a WskCloseSocket en un socket de un subproceso mientras la aplicación llama a WskSend en el mismo socket de otro subproceso. Las llamadas en curso a las funciones del socket deben devolver el control a la aplicación WSK antes de llamar a WskCloseSocket para cerrar el socket. Sin embargo, una aplicación WSK puede llamar a WskCloseSocket si hay IRP pendientes de llamadas anteriores a las funciones del socket que aún no se han completado.

Llamar a la función WskCloseSocket hace que el subsistema WSK cancele y complete todos los IRP pendientes de las llamadas anteriores a las funciones del socket. El subsistema WSK también garantiza que las funciones de devolución de llamada de eventos en curso hayan devuelto el control al subsistema WSK antes de cerrar el socket.

Después de que una aplicación WSK haya llamado A WskCloseSocket, no debe realizar más llamadas a ninguna de las funciones del socket.

Si una aplicación WSK aplica un descriptor de seguridad a un socket, la copia almacenada en caché del descriptor de seguridad especificado en la llamada a WskSocket, WskSocketConnect o WskControlSocket no se libera cuando se cierra el socket. Una aplicación WSK debe liberar la copia almacenada en caché del descriptor de seguridad mediante la operación de control de cliente WSK_RELEASE_SD cuando el descriptor de seguridad ya no es necesario.

El subsistema WSK desasigna la memoria del objeto de socket, WSK_SOCKET, que el subsistema WSK asignó cuando se creó el socket.

En el caso de los sockets orientados a la conexión, la función WskCloseSocket siempre realiza una desconexión abortiva del socket a menos que el socket ya esté completamente desconectado en ambas direcciones. Para desconectar correctamente un socket orientado a la conexión de una dirección de transporte remota, una aplicación WSK debe llamar a la función WskDisconnect .

Requisitos

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

Consulte también

WSK_PROVIDER_BASIC_DISPATCH

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_SOCKET

WskControlSocket

WskDisconnect

WskSocket

WskSocketConnect