Condividi tramite


PFN_WSK_CLOSE_SOCKET funzione di callback (wsk.h)

La funzione WskCloseSocket chiude un socket e libera tutte le risorse associate.

Sintassi

PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;

NTSTATUS PfnWskCloseSocket(
  [in]      PWSK_SOCKET Socket,
  [in, out] PIRP Irp
)
{...}

Parametri

[in] Socket

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

[in, out] Irp

Puntatore a un chiamante allocato IRP usato dal sottosistema WSK per completare l'operazione di chiusura in modo asincrono. Per altre informazioni sull'uso di IRP con funzioni WSK, vedere Uso di IRP con Funzioni kernel Winsock.

Valore restituito

WskCloseSocket restituisce uno dei codici NTSTATUS seguenti:

Codice restituito Descrizione
STATUS_SUCCESS
Il socket è stato chiuso correttamente. L'IRP verrà completato con lo stato di esito positivo.
STATUS_PENDING
Il sottosistema WSK non è riuscito a chiudere immediatamente il socket. Il sottosistema WSK completerà l'IRP dopo aver chiuso il socket. Lo stato dell'operazione di chiusura verrà restituito nel campo IoStatus.Status dell'IRP .
Altri codici di stato
Si è verificato un errore. L'IRP verrà completato con lo stato di errore.

Commenti

Prima di chiamare la funzione WskCloseSocket , un'applicazione WSK deve assicurarsi che non siano presenti altre chiamate di funzione in corso a una delle funzioni del socket, incluse le funzioni di estensione, in uno qualsiasi degli altri thread dell'applicazione. Ad esempio, un'applicazione WSK non deve chiamare WskCloseSocket in un socket in un thread mentre l'applicazione chiama WskSend nello stesso socket in un altro thread. Le chiamate in corso alle funzioni del socket devono restituire il controllo all'applicazione WSK prima di chiamare WskCloseSocket per chiudere il socket. Tuttavia, un'applicazione WSK può chiamare WskCloseSocket se sono presenti irP in sospeso dalle chiamate precedenti alle funzioni del socket che non sono ancora state completate.

La chiamata alla funzione WskCloseSocket causa l'annullamento e il completamento di tutti gli IRP in sospeso dalle chiamate precedenti alle funzioni del socket. Il sottosistema WSK garantisce inoltre che tutte le funzioni di callback degli eventi in corso abbiano restituito il controllo al sottosistema WSK prima di chiudere il socket.

Dopo che un'applicazione WSK ha chiamato WskCloseSocket, non deve effettuare ulteriori chiamate a una delle funzioni del socket.

Se un'applicazione WSK applica un descrittore di sicurezza a un socket, la copia memorizzata nella cache del descrittore di sicurezza specificata nella chiamata a WskSocket, WskSocketConnect o WskControlSocket non viene rilasciata quando il socket viene chiuso. Un'applicazione WSK deve rilasciare la copia memorizzata nella cache del descrittore di sicurezza usando l'operazione di controllo client WSK_RELEASE_SD quando il descrittore di sicurezza non è più necessario.

Il sottosistema WSK dealloca la memoria per l'oggetto socket del socket del socket, WSK_SOCKET, allocata dal sottosistema WSK al momento della creazione del socket.

Per i socket orientati alla connessione, la funzione WskCloseSocket esegue sempre una disconnessione interrotta del socket a meno che il socket non sia già completamente disconnesso in entrambe le direzioni. Per disconnettere correttamente un socket orientato alla connessione da un indirizzo di trasporto remoto, un'applicazione WSK deve chiamare la funzione WskDisconnect .

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_PROVIDER_BASIC_DISPATCH

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_SOCKET

WskControlSocket

WskDisconnect

WskSocket

WskSocketConnect