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 socket 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 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 do 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 anulativa 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 por 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 do WSK, consulte Usando IRPs com funções de kernel winsock.

Valor de retorno

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 o status de êxito.
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 o status de falha. O aplicativo WSK deve chamar a função WskCloseSocket para fechar o soquete o mais rápido possível.
Outros códigos de status
Ocorreu um erro. O IRP será concluído com o status de falha.

Observações

Um aplicativo WSK pode chamar a função WskDisconnect somente em um soquete de fluxo ou orientado à 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.

WskDisconnect faz com que o subsistema WSK notifique o endereço de transporte remoto, por meio de qualquer meio apropriado para o transporte subjacente, que a conexão está sendo desconectada. Se o parâmetro Buffer não forNULL, 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 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 semiabertos, 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 pode 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 WSK desconectará abortivamente o soquete e forçará a conclusão do IRP pendente.

Se uma desconexão anulativa for executada, o subsistema 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
de cliente com suporte mínimo Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows.
da Plataforma de Destino Universal
cabeçalho wsk.h (inclua Wsk.h)
IRQL <= DISPATCH_LEVEL

Consulte também

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect