Función WSAGetOverlappedResult (winsock2.h)
La función WSAGetOverlappedResult recupera los resultados de una operación superpuesta en el socket especificado.
Sintaxis
BOOL WSAAPI WSAGetOverlappedResult(
[in] SOCKET s,
[in] LPWSAOVERLAPPED lpOverlapped,
[out] LPDWORD lpcbTransfer,
[in] BOOL fWait,
[out] LPDWORD lpdwFlags
);
Parámetros
[in] s
Descriptor que identifica el socket.
Este es el mismo socket que se especificó cuando se inició la operación superpuesta mediante una llamada a cualquiera de las funciones winsock que admiten operaciones superpuestas. Estas funciones incluyen AcceptEx, ConnectEx, DisconnectEx, TransmitFile, TransmitPackets, WSARecv, WSARecvFrom, LPFN_WSARECVMSG (WSARecvMsg),WSASend, WSASendMsg, WSASendMsg, WSASendTo y WSAIoctl.
[in] lpOverlapped
Puntero a una estructura WSAOVERLAPPED que se especificó cuando se inició la operación superpuesta. Este parámetro no debe ser un puntero NULL .
[out] lpcbTransfer
Puntero a una variable de 32 bits que recibe el número de bytes transferidos realmente por una operación de envío o recepción, o por la función WSAIoctl . Este parámetro no debe ser un puntero NULL .
[in] fWait
Marca que especifica si la función debe esperar a que se complete la operación superpuesta pendiente. Si es TRUE, la función no devuelve hasta que se haya completado la operación. Si ES FALSE y la operación sigue pendiente, la función devuelve FALSE y la función WSAGetLastError devuelve WSA_IO_INCOMPLETE. El parámetro fWait solo se puede establecer en TRUE si la operación superpuesta seleccionó la notificación de finalización basada en eventos.
[out] lpdwFlags
Puntero a una variable de 32 bits que recibirá una o varias marcas que complementan el estado de finalización. Si la operación superpuesta se inició a través de WSARecv o WSARecvFrom, este parámetro contendrá el valor de resultados para el parámetro lpFlags . Este parámetro no debe ser un puntero NULL .
Valor devuelto
Si WSAGetOverlappedResult se realiza correctamente, el valor devuelto es TRUE. Esto significa que la operación superpuesta se ha completado correctamente y que se ha actualizado el valor al que apunta lpcbTransfer .
Si WSAGetOverlappedResult devuelve FALSE, esto significa que la operación superpuesta no se ha completado, la operación superpuesta se completó, pero con errores o no se pudo determinar el estado de finalización de la operación superpuesta debido a errores en uno o varios parámetros de WSAGetOverlappedResult. Si se produce un error, el valor al que apunta lpcbTransfer no se actualizará. Use WSAGetLastError para determinar la causa del error (ya sea por la función WSAGetOverlappedResult o por la operación superpuesta asociada).
Código de error | Significado |
---|---|
Debe producirse una llamada de WSAStartup correcta antes de usar esta función. | |
Error en el subsistema de red. | |
El descriptor no es un socket. | |
El parámetro hEvent de la estructura WSAOVERLAPPED no contiene un identificador de objeto de evento válido. | |
Uno de los parámetros es inaceptable. | |
El parámetro fWait es FALSE y la operación de E/S aún no se ha completado. | |
Uno o varios de los parámetros lpOverlapped, lpcbTransfer o lpdwFlags no están en una parte válida del espacio de direcciones del usuario. Este error se devuelve si el parámetro lpOverlapped, lpcbTransfer o lpdwFlags era un puntero NULL en Windows Server 2003 y versiones anteriores. |
Comentarios
La función WSAGetOverlappedResult informa de los resultados de la operación superpuesta especificada en el parámetro lpOverlapped para el socket especificado en el parámetro s . La función WSAGetOverlappedResult se pasa al descriptor de socket y a la estructura WSAOVERLAPPED que se especificó cuando se llamó a la función superpuesta. Se indica una operación pendiente cuando la función que inició la operación devuelve FALSE y la función WSAGetLastError devuelve WSA_IO_PENDING. Cuando está pendiente una operación de E/S como WSARecv , la función que inició la operación restablece el miembro hEvent de la estructura WSAOVERLAPPED al estado no asignado. Después, cuando se haya completado la operación pendiente, el sistema establece el objeto de evento en el estado señalado.
Si el parámetro fWait es TRUE, WSAGetOverlappedResult determina si la operación pendiente se ha completado esperando a que el objeto de evento esté en estado señalado. Un cliente puede establecer el parámetro fWait en TRUE, pero solo si seleccionó la notificación de finalización basada en eventos cuando se solicitó la operación de E/S. Si se seleccionó otra forma de notificación, el uso del parámetro hEvent de la estructura WSAOVERLAPPED es diferente y establecer fWait en TRUE provoca resultados impredecibles.
Si se llama a la función WSAGetOverlappedResult con el parámetro lpOverlapped, lpcbTransfer o lpdwFlags establecido en un puntero NULL en Windows Vista, se producirá una infracción de acceso. Si se llama a la función WSAGetOverlappedResult con el parámetro lpOverlapped, lpcbTransfer o lpdwFlags establecido en un puntero NULL en Windows Server 2003 y versiones anteriores, se devolverá el código de error de WSAEFAULT .
Windows 8.1 y Windows Server 2012 R2: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y versiones posteriores.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8.1, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | winsock2.h |
Library | Ws2_32.lib |
Archivo DLL | Ws2_32.dll |