Condividi tramite


Funzione WSAGetOverlappedResult (winsock2.h)

La funzione WSAGetOverlappedResult recupera i risultati di un'operazione sovrapposta nel socket specificato.

Sintassi

BOOL WSAAPI WSAGetOverlappedResult(
  [in]  SOCKET          s,
  [in]  LPWSAOVERLAPPED lpOverlapped,
  [out] LPDWORD         lpcbTransfer,
  [in]  BOOL            fWait,
  [out] LPDWORD         lpdwFlags
);

Parametri

[in] s

Descrittore che identifica il socket.

Si tratta dello stesso socket specificato quando l'operazione sovrapposta è stata avviata da una chiamata a una delle funzioni Winsock che supporta operazioni sovrapposte. Queste funzioni includono AcceptEx, ConnectEx, DisconnectEx, TransmitFile, TransmitPackets, WSARecv, WSARecvFrom, LPFN_WSARECVMSG (WSARecvMsg), WSASend, WSASendMsg, WSASendMsg, WSASendTo e WSAIoctl.

[in] lpOverlapped

Puntatore a una struttura WSAOVERLAPPED specificata quando è stata avviata l'operazione sovrapposta. Questo parametro non deve essere un puntatore NULL .

[out] lpcbTransfer

Puntatore a una variabile a 32 bit che riceve il numero di byte effettivamente trasferiti da un'operazione di invio o ricezione o dalla funzione WSAIoctl . Questo parametro non deve essere un puntatore NULL .

[in] fWait

Flag che specifica se la funzione deve attendere il completamento dell'operazione sovrapposta in sospeso. Se TRUE, la funzione non restituisce fino al completamento dell'operazione. Se FALSE e l'operazione è ancora in sospeso, la funzione restituisce FALSE e la funzione WSAGetLastError restituisce WSA_IO_INCOMPLETE. Il parametro fWait può essere impostato su TRUE solo se l'operazione sovrapposta ha selezionato la notifica di completamento basata su eventi.

[out] lpdwFlags

Puntatore a una variabile a 32 bit che riceverà uno o più flag che integrano lo stato di completamento. Se l'operazione sovrapposta è stata avviata tramite WSARecv o WSARecvFrom, questo parametro conterrà il valore dei risultati per il parametro lpFlags. Questo parametro non deve essere un puntatore NULL .

Valore restituito

Se WSAGetOverlappedResult riesce, il valore restituito è TRUE. Ciò significa che l'operazione sovrapposta è stata completata correttamente e che il valore puntato da lpcbTransfer è stato aggiornato.

Se WSAGetOverlappedResult restituisce FALSE, ciò significa che l'operazione sovrapposta non è stata completata, l'operazione sovrapposta è stata completata ma con errori o lo stato di completamento dell'operazione sovrapposta non è stato possibile determinare a causa di errori in uno o più parametri in WSAGetOverlappedResult. In caso di errore, il valore indicato da lpcbTransfer non verrà aggiornato. Usare WSAGetLastError per determinare la causa dell'errore (dalla funzione WSAGetOverlappedResult o dall'operazione sovrapposta associata).

Codice di errore Significato
WSANOTINITIALISED
Prima di usare questa funzione, è necessario eseguire una chiamata WSAStartup riuscita.
WSAENETDOWN
Il sottosistema di rete non è riuscito.
WSAENOTSOCK
Il descrittore non è un socket.
WSA_INVALID_HANDLE
Il parametro hEvent della struttura WSAOVERLAPPED non contiene un handle di oggetti evento valido.
WSA_INVALID_PARAMETER
Uno dei parametri è inaccettabile.
WSA_IO_INCOMPLETE
Il parametro fWait è FALSE e l'operazione di I/O non è ancora stata completata.
WSAEFAULT
Uno o più dei parametri lpOverlapped, lpcbTransfer o lpdwFlags non si trovano in una parte valida dello spazio indirizzi utente. Questo errore viene restituito se il parametro lpOverlapped, lpcbTransfer o lpdwFlags è un puntatore NULL in Windows Server 2003 e versioni precedenti.

Commenti

La funzione WSAGetOverlappedResult segnala i risultati dell'operazione sovrapposta specificata nel parametro lpOverlapped per il socket specificato nel parametro s . La funzione WSAGetOverlappedResult viene passata al descrittore socket e alla struttura WSAOVERLAPPED specificata quando è stata chiamata la funzione sovrapposta. Un'operazione in sospeso è indicata quando la funzione che ha avviato l'operazione restituisce FALSE e la funzione WSAGetLastError restituisce WSA_IO_PENDING. Quando un'operazione di I/O come WSARecv è in sospeso, la funzione che ha avviato l'operazione reimposta il membro hEvent della struttura WSAOVERLAPPED allo stato non assegnato. Al termine dell'operazione in sospeso, il sistema imposta quindi l'oggetto evento sullo stato segnalato.

Se il parametro fWait è TRUE, WSAGetOverlappedResult determina se l'operazione in sospeso è stata completata aspettando che l'oggetto evento sia nello stato segnalato. Un client può impostare il parametro fWait su TRUE, ma solo se è stata selezionata la notifica di completamento basata su eventi quando è stata richiesta l'operazione di I/O. Se è stata selezionata un'altra forma di notifica, l'utilizzo del parametro hEvent della struttura WSAOVERLAPPED è diverso e l'impostazione di fWait su TRUE causa risultati imprevedibili.

Se la funzione WSAGetOverlappedResult viene chiamata con il parametro lpOverlapped, lpcbTransfer o lpdwFlags impostato su un puntatore NULL in Windows Vista, questo comporterà una violazione di accesso. Se la funzione WSAGetOverlappedResult viene chiamata con il parametro lpOverlapped, lpcbTransfer o lpdwFlags impostato su un puntatore NULL in Windows Server 2003 e versioni precedenti, verrà restituito il codice di errore WSAEFAULT .

Nota Tutte le operazioni di I/O vengono annullate quando un thread viene chiuso. Per i socket sovrapposti, le operazioni asincrone in sospeso possono non riuscire se il thread viene chiuso prima del completamento delle operazioni. Per altre informazioni, vedere ExitThread .
 
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 winsock2.h
Libreria Ws2_32.lib
DLL Ws2_32.dll

Vedi anche

WSAAccept

WSAConnect

WSACreateEvent

Wsaioctl

WSARecv

WSARecvFrom

WSASend

WSASendTo

WSAWaitForMultipleEvents

Funzioni Winsock

Informazioni di riferimento su Winsock