Condividi tramite


Funzione WSARecvDisconnect (winsock2.h)

La funzione WSARecvDisconnect termina la ricezione su un socket e recupera i dati di disconnessione se il socket è orientato alla connessione.

Sintassi

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

Parametri

[in] s

Descrittore che identifica un socket.

[out] lpInboundDisconnectData

Puntatore ai dati di disconnessione in ingresso.

Valore restituito

Se non si verifica alcun errore, WSARecvDisconnect restituisce zero. In caso contrario, viene restituito un valore di SOCKET_ERROR e è possibile recuperare un codice di errore specifico chiamando WSAGetLastError.

Codice di errore Significato
WSANOTINITIALISED
Prima di usare questa funzione, è necessario che venga eseguita una chiamata WSAStartup riuscita.
WSAENETDOWN
Il sottosistema di rete non è riuscito.
WSAEFAULT
Il buffer a cui fa riferimento il parametro lpInboundDisconnectData è troppo piccolo.
WSAENOPROTOOPT
I dati di disconnessione non sono supportati dalla famiglia di protocolli indicata. Si noti che le implementazioni di TCP/IP che non supportano i dati di disconnessione non sono necessarie per restituire il codice di errore WSAENOPROTOOPT. Per informazioni sull'implementazione Microsoft di TCP/IP, vedere la sezione osservazioni.
WSAEINPROGRESS
È in corso una chiamata di Windows Sockets 1.1 bloccante oppure il provider di servizi sta ancora elaborando una funzione di callback.
WSAENOTCONN
Il socket non è connesso (solo socket orientati alla connessione).
WSAENOTSOCK
Il descrittore non è un socket.

Commenti

La funzione WSARecvDisconnect viene usata nei socket orientati alla connessione per disabilitare la ricezione e recuperare i dati di disconnessione in ingresso dall'entità remota. Equivale a un arresto (SD_RECEIVE), ad eccezione del fatto che WSARecvDisconnect consente anche la ricezione dei dati di disconnessione (nei protocolli che lo supportano).

Dopo che questa funzione è stata rilasciata correttamente, le successive ricevute sul socket non saranno consentite. La chiamata a WSARecvDisconnect non ha alcun effetto sui livelli di protocollo inferiori. Per i socket TCP, se sono ancora presenti dati in coda sul socket in attesa di ricezione o i dati arrivano successivamente, la connessione viene reimpostata, poiché i dati non possono essere recapitati all'utente. Per UDP, i datagrammi in ingresso vengono accettati e accodati. In nessun caso verrà generato un pacchetto di errore ICMP.

Nota L'implementazione nativa di TCP/IP in Windows non supporta i dati di disconnessione. I dati di disconnessione sono supportati solo con i provider Windows Sockets che hanno il flag XP1_DISCONNECT_DATA nella struttura WSAPROTOCOL_INFO . Usare la funzione WSAEnumProtocols per ottenere WSAPROTOCOL_INFO strutture per tutti i provider installati.
 
Per ricevere correttamente i dati di disconnessione in ingresso, un'applicazione deve usare altri meccanismi per determinare che il circuito è stato chiuso. Ad esempio, un'applicazione deve ricevere una notifica di FD_CLOSE, ricevere un valore restituito zero o ricevere un codice di errore WSAEDISCON o WSAECONNRESET da recv/WSARecv.

La funzione WSARecvDisconnect non chiude il socket e le risorse collegate al socket non verranno liberate finché non viene richiamato closesocket .

La funzione WSARecvDisconnect non blocca indipendentemente dall'impostazione SO_LINGER sul socket.

Un'applicazione non deve basarsi sulla possibilità di riutilizzare un socket dopo la disconnessione tramite WSARecvDisconnect. In particolare, non è necessario un provider Windows Sockets per supportare l'uso di connessione o WSAConnect in un socket di questo tipo.

Nota Quando si esegue una chiamata Winsock bloccante, ad esempio WSARecvDisconnect, Winsock potrebbe dover attendere il completamento di un evento di rete. Winsock esegue un'attesa avvisabile in questa situazione, che può essere interrotta da una chiamata di procedura asincrona pianificata nello stesso thread. L'esecuzione di un'altra chiamata Winsock bloccante all'interno di un APC che ha interrotto una chiamata winsock in corso sullo stesso thread causerà un comportamento non definito e non deve mai essere tentata dai client Winsock.
 

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winsock2.h
Libreria Ws2_32.lib
DLL Ws2_32.dll

Vedi anche

WSAConnect

WSAEnumProtocols

WSAGetLastError

WSAPROTOCOL_INFO

WSARecv

Funzioni Winsock

Informazioni di riferimento su Winsock

closesocket

connect

socket