PFN_WSK_DISCONNECT función de devolución de llamada (wsk.h)
La función WskDisconnect desconecta un socket orientado a la conexión o secuencia 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 el subsistema de WSK transmite a la dirección de transporte remota antes de desconectar el socket. Si no hay dichos datos que se van a transmitir, la aplicación WSK establece este puntero en NULL. Si se especifica WSK_FLAG_ABORTIVE en el parámetro Flags de, el parámetro buffer de debe ser null.
[in] Flags
Valor de ULONG que contiene la marca siguiente o cero:
WSK_FLAG_ABORTIVE
Dirige el subsistema WSK para realizar una desconexión abortiva 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:
Observaciones
Una aplicación WSK puede llamar a la WskDisconnect función solo en un socket orientado a la conexión o secuencia 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 de no esNULL, 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 remoto hasta que la aplicación remota desconecte su 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 recuperar llamando a la función WskDisconnect de y especificando la marca de 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 abortiva, 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 | Valor |
---|---|
cliente mínimo admitido | Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows. |
de la plataforma de destino de | Universal |
encabezado de | wsk.h (incluya Wsk.h) |
irQL | <= DISPATCH_LEVEL |