Condividi tramite


PFN_WSK_DISCONNECT funzione di callback (wsk.h)

La funzione WskDisconnect disconnette un socket orientato alla connessione o di flusso 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 disconnesso.

[in, optional] Buffer

Puntatore a una struttura WSK_BUF. Questa struttura descrive un buffer di dati che contiene i 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 Flag, 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 di runtime di integrazione con funzioni WSK, vedere Uso di runtime di integrazione con Funzioni kernel Winsock.

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 di 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 il prima possibile.
Altri codici di stato
Si è verificato un errore. L'IRP verrà completato con lo stato di errore.

Osservazioni

Un'applicazione WSK può chiamare il WskDisconnect funzione solo su un socket orientato alla connessione o flusso 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 informi l'indirizzo di trasporto remoto, tramite qualsiasi mezzo appropriato per il trasporto sottostante, che la connessione venga disconnessa. Se il parametro buffer non è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 di WSK_FLAG_ABORTIVE o chiamando la funzione WskCloseSocket. In entrambi i casi, il sottosistema WSK disconnette in modo interrotto 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.

Fabbisogno

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

Vedere anche

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect