Condividi tramite


Funzione WSACleanup (winsock.h)

La funzione WSACleanup termina l'uso della DLL Winsock 2 (Ws2_32.dll).

Sintassi

int WSACleanup();

Valore restituito

Il valore restituito è zero se l'operazione ha avuto esito positivo. In caso contrario, il valore SOCKET_ERROR viene restituito e un numero di errore specifico può essere recuperato chiamando WSAGetLastError.

In un ambiente multithreaded , WSACleanup termina le operazioni di Windows Sockets per tutti i thread.

Codice di errore Significato
WSANOTINITIALISED
Prima di usare questa funzione, è necessario eseguire una chiamata WSAStartup riuscita.
WSAENETDOWN
Il sottosistema di rete non è riuscito.
WSAEINPROGRESS
Una chiamata windows Sockets 1.1 bloccata è in corso oppure il provider di servizi sta ancora elaborando una funzione di callback.

Commenti

Un'applicazione o una DLL è necessaria per eseguire una chiamata WSAStartup riuscita prima di poter usare i servizi Windows Sockets. Al termine dell'uso di Windows Sockets, l'applicazione o la DLL devono chiamare WSACleanup per annullare la registrazione da un'implementazione di Windows Sockets e consentire all'implementazione di liberare qualsiasi risorsa allocata per conto dell'applicazione o della DLL.

Quando WSACleanup viene chiamato, le chiamate Windows Socket in sospeso o asincrone rilasciate da qualsiasi thread in questo processo vengono annullate senza pubblicare messaggi di notifica o senza segnalare alcun oggetto evento. Tutte le operazioni di invio o ricezione in sospeso (WSASend, WSASendTo, WSARecv o WSARecvFrom con un socket sovrapposto, ad esempio) rilasciate da qualsiasi thread in questo processo vengono annullate senza impostare l'oggetto evento o richiamando la routine di completamento, se specificata. In questo caso, le operazioni sovrapposte in sospeso hanno esito negativo con lo stato di errore WSA_OPERATION_ABORTED.

I socket aperti quando È stato chiamato WSACleanup vengono reimpostati e deallocati automaticamente come se fosse stato chiamato closesocket . I socket chiusi con closesocket , ma che hanno ancora dati in sospeso da inviare possono essere interessati quando viene chiamato WSACleanup . In questo caso, i dati in sospeso possono essere persi se il WS2_32.DLL viene scaricato dalla memoria quando l'applicazione viene chiusa. Per assicurarsi che tutti i dati in sospeso vengano inviati, un'applicazione deve usare l'arresto per chiudere la connessione, quindi attendere il completamento della chiusura prima di chiamare closesocket e WSACleanup. Tutte le risorse e lo stato interno, ad esempio messaggi non inseriti in coda o pubblicati, devono essere deallocati in modo da essere disponibili per l'utente successivo.

Per ogni chiamata a WSACleanup per ogni chiamata riuscita a WSAStartup , è necessario che venga eseguita una chiamata a WSAStartup. Solo la chiamata alla funzione WSACleanup finale esegue la pulizia effettiva. Le chiamate precedenti semplicemente decrenono un conteggio dei riferimenti interni nel WS2_32.DLL.

NotaWSACleanup non annulla la registrazione dei nomi (nomi peer, ad esempio) registrati con un provider di spazi dei nomi Windows Sockets, ad esempio provider di spazi dei nomi Peer Name Resolution Protocol (PNRP).
 
In Windows Sockets 1.1 tentare di chiamare WSACleanup dall'interno di un hook di blocco e quindi non verificare che il codice restituito sia stato un errore di programmazione comune. Se un'applicazione Winsock 1.1 deve uscire mentre una chiamata di blocco è in sospeso, l'applicazione deve prima annullare la chiamata di blocco con WSACancelBlockingCall e quindi rilasciare la chiamata WSACleanup dopo che il controllo è stato restituito all'applicazione. In Windows Sockets 2 questo problema non esiste e la funzione WSACancelBlockingCall è stata rimossa.

La funzione WSACleanup comporta in genere l'annullamento del caricamento delle DLL helper specifiche del protocollo. Di conseguenza, la funzione WSACleanup non deve essere chiamata dalla funzione DllMain in una DLL dell'applicazione. Questo può potenzialmente causare deadlock. Per altre informazioni, vedere la funzione principale della DLL.

Windows Phone 8: questa funzione è supportata per le app Windows Phone Store in Windows Phone 8 e versioni successive.

Windows 8.1 e Windows Server 2012 R2: questa funzione è supportata per le app di Windows Store in Windows 8.1, Windows Server 2012 R2 e versioni successive.

Requisiti

Requisito Valore
Client minimo supportato Windows 8.1, Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione winsock.h (include Winsock2.h)
Libreria Ws2_32.lib
DLL Ws2_32.dll

Vedi anche

API provider di spazi dei nomi PNRP

WSAStartup

Funzioni Winsock

Informazioni di riferimento su Winsock

closesocket

shutdown