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 |
---|---|
|
El socket se desconectó correctamente de la dirección de transporte remoto. El IRP se completará con el estado correcto. |
|
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. |
|
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. |
|
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 |