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 |
---|---|
Prima di usare questa funzione, è necessario eseguire una chiamata WSAStartup riuscita. | |
Il sottosistema di rete non è riuscito. | |
Il descrittore non è un socket. | |
Il parametro hEvent della struttura WSAOVERLAPPED non contiene un handle di oggetti evento valido. | |
Uno dei parametri è inaccettabile. | |
Il parametro fWait è FALSE e l'operazione di I/O non è ancora stata completata. | |
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 .
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 |