Condividi tramite


PFN_WSK_DISCONNECT funzione di callback (wsk.h)

La funzione WskDisconnect disconnette un socket di flusso o orientato alla connessione da un indirizzo di trasporto remoto.

Sintassi

PFN_WSK_DISCONNECT PfnWskDisconnect;

NTSTATUS PfnWskDisconnect(
  [in]           PWSK_SOCKET Socket,
  [in, optional] PWSK_BUF Buffer,
  [in]           ULONG Flags,
  [in, out]      PIRP Irp
)
{...}

Parametri

[in] Socket

Puntatore a una struttura WSK_SOCKET che specifica l'oggetto socket per il socket che viene disconnesso.

[in, optional] Buffer

Puntatore a una struttura WSK_BUF . Questa struttura descrive un buffer di dati che contiene dati da trasmettere dal sottosistema WSK all'indirizzo di trasporto remoto prima che il socket venga disconnesso. Se non sono presenti dati di questo tipo da trasmettere, l'applicazione WSK imposta questo puntatore su NULL. Se WSK_FLAG_ABORTIVE viene specificato nel parametro Flags , il parametro Buffer deve essere NULL.

[in] Flags

Valore ULONG che contiene il flag seguente o zero:

WSK_FLAG_ABORTIVE

Indirizza il sottosistema WSK a eseguire una disconnessione interrotta del socket. Se un'applicazione WSK non specifica questo flag, il sottosistema WSK eseguirà una disconnessione normale del socket.

[in, out] Irp

Puntatore a un IRP allocato dal chiamante usato dal sottosistema WSK per completare l'operazione di disconnessione in modo asincrono. Per altre informazioni sull'uso dei runtime di integrazione con le funzioni WSK, vedere Using IRPs with Winsock Kernel Functions .For more information about using IRPs with WSK functions, see Using IRPs with Winsock Kernel Functions.

Valore restituito

WskDisconnect restituisce uno dei codici NTSTATUS seguenti:

Codice restituito Descrizione
STATUS_SUCCESS
Il socket è stato disconnesso correttamente dall'indirizzo di trasporto remoto. L'IRP verrà completato con lo stato di esito positivo.
STATUS_PENDING
Il sottosistema WSK non è riuscito a disconnettere immediatamente il socket. Il sottosistema WSK completerà l'IRP dopo aver disconnesso il socket dall'indirizzo di trasporto remoto. Lo stato dell'operazione di disconnessione verrà restituito nel campo IoStatus.Status dell'IRP.
STATUS_FILE_FORCED_CLOSED
Il socket non è più funzionale. L'IRP verrà completato con lo stato di errore. L'applicazione WSK deve chiamare la funzione WskCloseSocket per chiudere il socket appena possibile.
Altri codici di stato
Si è verificato un errore. L'IRP verrà completato con lo stato di errore.

Commenti

Un'applicazione WSK può chiamare la funzione WskDisconnect solo su un socket di flusso o orientato alla connessione connesso in precedenza a un indirizzo di trasporto remoto o su un socket accettato su un socket in ascolto.

WskDisconnect fa sì che il sottosistema WSK comunicherà all'indirizzo di trasporto remoto, tramite qualsiasi mezzo appropriato per il trasporto sottostante, che la connessione venga disconnessa. Se il parametro Buffer è diverso da NULL, il sottosistema WSK trasmette i dati nel buffer all'indirizzo di trasporto remoto prima di disconnettere il socket.

Se viene eseguita una disconnessione normale, il sottosistema WSK attende l'invio di tutti i dati di trasmissione in sospeso prima di disconnettere il socket. Dopo la disconnessione del socket, l'applicazione WSK non può inviare dati aggiuntivi all'indirizzo di trasporto remoto. Tuttavia, l'applicazione WSK può comunque ricevere dati aggiuntivi dall'indirizzo di trasporto remoto fino a quando l'applicazione remota non disconnette la fine del socket.

Si noti che non tutti i trasporti supportano connessioni semi-aperte. Se un trasporto non supporta connessioni semi-aperte, l'applicazione WSK non riceverà dati aggiuntivi dall'indirizzo di trasporto remoto dopo l'esecuzione di una disconnessione normale.

Con una disconnessione normale, l'IRP viene completato solo quando l'operazione di disconnessione viene completata completamente dal protocollo di trasporto. Per alcuni protocolli di trasporto, l'IRP potrebbe non essere completato se si verifica un problema durante la trasmissione dei dati all'indirizzo di trasporto remoto. In questo caso, l'applicazione WSK può essere ripristinata chiamando di nuovo la funzione WskDisconnect e specificando il flag WSK_FLAG_ABORTIVE o chiamando la funzione WskCloseSocket . In entrambi i casi, il sottosistema WSK disconnette automaticamente il socket e forza il completamento dell'IRP in sospeso.

Se viene eseguita una disconnessione interrotta, il sottosistema WSK annulla tutte le operazioni di trasmissione in corso e in sospeso e non attende di disconnettere il socket. Dopo una disconnessione interrotta, l'applicazione WSK non può inviare dati aggiuntivi all'indirizzo di trasporto remoto o ricevere dati aggiuntivi dall'indirizzo di trasporto remoto.

Un'applicazione WSK può chiudere completamente la connessione chiamando la funzione WskCloseSocket .

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Universale
Intestazione wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

Vedi anche

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect