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

La función WskDisconnect desconecta un socket de flujo o orientado a la conexión de una dirección de transporte remota.

Sintaxis

PFN_WSK_DISCONNECT PfnWskDisconnect;

NTSTATUS PfnWskDisconnect(
  [in]           PWSK_SOCKET Socket,
  [in, optional] PWSK_BUF Buffer,
  [in]           ULONG Flags,
  [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á desconectando.

[in, optional] Buffer

Puntero a una estructura WSK_BUF . Esta estructura describe un búfer de datos que contiene los datos que va a transmitir el subsistema WSK a la dirección de transporte remota antes de que se desconecte el socket. Si no se transmiten estos datos, la aplicación WSK establece este puntero en NULL. Si WSK_FLAG_ABORTIVE se especifica en el parámetro Flags , el parámetro Buffer debe ser NULL.

[in] Flags

Valor ULONG que contiene la marca siguiente o cero:

WSK_FLAG_ABORTIVE

Dirige el subsistema WSK para realizar una desconexión anulativa del socket. Si una aplicación WSK no especifica esta marca, el subsistema WSK realizará una desconexión correcta del socket.

[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 desconexión 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

WskDisconnect devuelve uno de los siguientes códigos NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS
El socket se desconectó correctamente de la dirección de transporte remoto. El IRP se completará con el estado correcto.
STATUS_PENDING
El subsistema WSK no pudo desconectar el socket inmediatamente. El subsistema WSK completará el IRP después de desconectar el socket de la dirección de transporte remota. El estado de la operación de desconexión se devolverá en el campo IoStatus.Status del IRP.
STATUS_FILE_FORCED_CLOSED
El socket ya no es funcional. El IRP se completará con el estado de error. La aplicación WSK debe llamar a la función WskCloseSocket para cerrar el socket lo antes posible.
Otros códigos de estado
Se produjo un error. El IRP se completará con el estado de error.

Comentarios

Una aplicación WSK puede llamar a la función WskDisconnect solo en un socket orientado a la conexión o de flujo que anteriormente se conectó a una dirección de transporte remota o en un socket que aceptó en un socket de escucha.

WskDisconnect hace que el subsistema WSK notifique a la dirección de transporte remota, a través de cualquier medio adecuado para el transporte subyacente, que la conexión se está desconectando. Si el parámetro Buffer no es NULL, el subsistema WSK transmite los datos del búfer a la dirección de transporte remota antes de desconectar el socket.

Si se realiza una desconexión correcta, el subsistema WSK espera hasta que se envíen todos los datos de transmisión pendientes antes de desconectar el socket. Una vez desconectado el socket, la aplicación WSK no puede enviar datos adicionales a la dirección de transporte remota. Sin embargo, la aplicación WSK todavía puede recibir datos adicionales de la dirección de transporte remota hasta que la aplicación remota desconecte el final del socket.

Tenga en cuenta que no todos los transportes admiten conexiones medias abiertas. Si un transporte no admite conexiones medias abiertas, la aplicación WSK no recibirá datos adicionales de la dirección de transporte remota después de realizar una desconexión correcta.

Con una desconexión correcta, el IRP solo se completa cuando el protocolo de transporte completa la operación de desconexión. Para algunos protocolos de transporte, es posible que el IRP no se complete si hay un problema al transmitir datos a la dirección de transporte remota. En esta situación, la aplicación WSK puede recuperarse llamando de nuevo a la función WskDisconnect y especificando la marca WSK_FLAG_ABORTIVE o llamando a la función WskCloseSocket . En cualquier situación, el subsistema WSK desconectará de forma anulativa el socket y forzará la finalización del IRP pendiente.

Si se realiza una desconexión abortiva, el subsistema WSK cancela todas las operaciones de transmisión en curso y pendientes y no espera a desconectar el socket. Después de una desconexión anulativa, la aplicación WSK no puede enviar datos adicionales a la dirección de transporte remota ni recibir datos adicionales de la dirección de transporte remoto.

Una aplicación WSK puede cerrar completamente la conexión llamando a la función WskCloseSocket .

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_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect