Compartilhar via


PFN_WSK_DISCONNECT função de retorno de chamada (wsk.h)

A função WskDisconnect desconecta um soquete de fluxo ou orientado à conexão de um endereço de transporte remoto.

Sintaxe

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

Um ponteiro para uma estrutura WSK_SOCKET que especifica o objeto de soquete para o soquete que está sendo desconectado.

[in, optional] Buffer

Um ponteiro para uma estrutura WSK_BUF . Essa estrutura descreve um buffer de dados que contém dados a serem transmitidos pelo subsistema do WSK para o endereço de transporte remoto antes que o soquete seja desconectado. Se não houver esses dados a serem transmitidos, o aplicativo WSK definirá esse ponteiro como NULL. Se WSK_FLAG_ABORTIVE for especificado no parâmetro Flags , o parâmetro Buffer deverá ser NULL.

[in] Flags

Um valor ULONG que contém o seguinte sinalizador ou zero:

WSK_FLAG_ABORTIVE

Direciona o subsistema WSK para executar uma desconexão abortiva do soquete. Se um aplicativo WSK não especificar esse sinalizador, o subsistema WSK executará uma desconexão normal do soquete.

[in, out] Irp

Um ponteiro para um IRP alocado pelo chamador que o subsistema WSK usa para concluir a operação de desconexão de forma assíncrona. Para obter mais informações sobre como usar IRPs com funções WSK, consulte Usando IRPs com funções de kernel Winsock.

Retornar valor

O WskDisconnect retorna um dos seguintes códigos NTSTATUS:

Código de retorno Descrição
STATUS_SUCCESS
O soquete foi desconectado com êxito do endereço de transporte remoto. O IRP será concluído com êxito status.
STATUS_PENDING
O subsistema do WSK não pôde desconectar o soquete imediatamente. O subsistema WSK concluirá o IRP depois de desconectar o soquete do endereço de transporte remoto. O status da operação de desconexão será retornado no campo IoStatus.Status do IRP.
STATUS_FILE_FORCED_CLOSED
O soquete não está mais funcional. O IRP será concluído com falha status. O aplicativo WSK deve chamar a função WskCloseSocket para fechar o soquete o mais rápido possível.
Outros códigos status
Ocorreu um erro. O IRP será concluído com falha status.

Comentários

Um aplicativo WSK pode chamar a função WskDisconnect apenas em um soquete de fluxo ou orientado para conexão que ele conectou anteriormente a um endereço de transporte remoto ou em um soquete que ele aceitou em um soquete de escuta.

O WskDisconnect faz com que o subsistema do WSK notifique o endereço de transporte remoto, por meio de qualquer meio apropriado para o transporte subjacente, de que a conexão está sendo desconectada. Se o parâmetro Buffer não for NULL, o subsistema WSK transmitirá os dados no buffer para o endereço de transporte remoto antes de desconectar o soquete.

Se uma desconexão normal for executada, o subsistema do WSK aguardará até que todos os dados de transmissão pendentes sejam enviados antes de desconectar o soquete. Depois que o soquete for desconectado, o aplicativo WSK não poderá enviar dados adicionais para o endereço de transporte remoto. No entanto, o aplicativo WSK ainda pode receber dados adicionais do endereço de transporte remoto até que o aplicativo remoto desconecte o final do soquete.

Observe que nem todos os transportes dão suporte a conexões semiaberto. Se um transporte não oferecer suporte a conexões semiaberto, o aplicativo WSK não receberá nenhum dado adicional do endereço de transporte remoto depois que uma desconexão normal for executada.

Com uma desconexão normal, o IRP é concluído somente quando a operação de desconexão é totalmente concluída pelo protocolo de transporte. Para alguns protocolos de transporte, o IRP poderá não ser concluído se houver um problema ao transmitir dados para o endereço de transporte remoto. Nessa situação, o aplicativo WSK pode se recuperar chamando a função WskDisconnect novamente e especificando o sinalizador WSK_FLAG_ABORTIVE ou chamando a função WskCloseSocket . Em qualquer situação, o subsistema do WSK desconectará abortivamente o soquete e forçará a conclusão do IRP pendente.

Se uma desconexão anulativa for executada, o subsistema do WSK cancelará todas as operações de transmissão pendentes e em andamento e não aguardará para desconectar o soquete. Após uma desconexão anulativa, o aplicativo WSK não pode enviar dados adicionais para o endereço de transporte remoto ou receber dados adicionais do endereço de transporte remoto.

Um aplicativo WSK pode fechar completamente a conexão chamando a função WskCloseSocket .

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows.
Plataforma de Destino Universal
Cabeçalho wsk.h (inclua Wsk.h)
IRQL <= DISPATCH_LEVEL

Confira também

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect