Функция WSAGetOverlappedResult (winsock2.h)
Функция WSAGetOverlappedResult извлекает результаты перекрывающейся операции в указанном сокете.
Синтаксис
BOOL WSAAPI WSAGetOverlappedResult(
[in] SOCKET s,
[in] LPWSAOVERLAPPED lpOverlapped,
[out] LPDWORD lpcbTransfer,
[in] BOOL fWait,
[out] LPDWORD lpdwFlags
);
Параметры
[in] s
Дескриптор, определяющий сокет.
Это тот же сокет, который был указан при запуске перекрывающейся операции вызовом любой из функций Winsock, поддерживающих перекрывающиеся операции. К этим функциям относятся AcceptEx, ConnectEx, DisconnectEx, TransmitFile, TransmitPackets, WSARecv, WSARecvFrom, LPFN_WSARECVMSG (WSARecvMsg),WSASend, WSASendMsg, WSASendTo и WSAIoctl.
[in] lpOverlapped
Указатель на структуру WSAOVERLAPPED , указанную при запуске перекрывающейся операции. Этот параметр не должен быть указателем NULL .
[out] lpcbTransfer
Указатель на 32-разрядную переменную, получающую количество байтов, которые фактически были переданы операцией отправки или получения или функцией WSAIoctl . Этот параметр не должен быть указателем NULL .
[in] fWait
Флаг, указывающий, должна ли функция ожидать завершения ожидающей перекрывающейся операции. Если задано значение TRUE, функция не возвращается, пока операция не будет завершена. Если значение FALSE и операция по-прежнему находится в состоянии ожидания, функция возвращает значение FALSE , а функция WSAGetLastError возвращает WSA_IO_INCOMPLETE. Параметру fWait может быть присвоено значение TRUE, только если перекрываемая операция выбрала уведомление о завершении на основе событий.
[out] lpdwFlags
Указатель на 32-разрядную переменную, которая получит один или несколько флагов, дополняющих состояние завершения. Если перекрываемая операция была инициирована через WSARecv или WSARecvFrom, этот параметр будет содержать значение результатов для параметра lpFlags . Этот параметр не должен быть указателем NULL .
Возвращаемое значение
Если WSAGetOverlappedResult завершается успешно, возвращается значение TRUE. Это означает, что перекрывающаяся операция успешно завершена, а значение, на которое указывает lpcbTransfer , обновлено.
Если WSAGetOverlappedResult возвращает значение FALSE, это означает, что либо перекрывающаяся операция не завершена, перекрывающаяся операция завершена, но с ошибками, либо состояние завершения перекрывающейся операции не может быть определено из-за ошибок в одном или нескольких параметрах WSAGetOverlappedResult. При сбое значение, указанное lpcbTransfer , не будет обновлено. Используйте WSAGetLastError , чтобы определить причину сбоя (с помощью функции WSAGetOverlappedResult или связанной операции перекрытия).
Код ошибки | Значение |
---|---|
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup . | |
Произошел сбой сетевой подсистемы. | |
Дескриптор не является сокетом. | |
Параметр hEvent структуры WSAOVERLAPPED не содержит допустимый дескриптор объекта события. | |
Один из параметров недопустим. | |
Параметр fWait имеет значение FALSE , а операция ввода-вывода еще не завершена. | |
Один или несколько параметров lpOverlapped, lpcbTransfer или lpdwFlags не находятся в допустимой части адресного пространства пользователя. Эта ошибка возвращается, если параметр lpOverlapped, lpcbTransfer или lpdwFlags был пустым указателем в Windows Server 2003 и более ранних версиях. |
Комментарии
Функция WSAGetOverlappedResult сообщает результаты перекрывающейся операции, указанной в параметре lpOverlapped для сокета, указанного в параметре s . Функция WSAGetOverlappedResult передает дескриптор сокета и структуру WSAOVERLAPPED , указанную при вызове перекрывающейся функции. Ожидающая операция указывается, когда функция, которая запустила операцию, возвращает значение FALSE , а функция WSAGetLastError возвращает WSA_IO_PENDING. Когда операция ввода-вывода, например WSARecv , находится в состоянии ожидания, функция, которая запустила операцию, сбрасывает элемент hEvent структуры WSAOVERLAPPED в состояние без знака. После завершения ожидающей операции система устанавливает для объекта события сигнальное состояние.
Если параметр fWait имеет значение TRUE, WSAGetOverlappedResult определяет, завершена ли ожидающая операция, ожидая, пока объект события будет находиться в состоянии сигнала. Клиент может задать для параметра fWait значение TRUE, но только если он выбрал уведомление о завершении на основе событий при запросе операции ввода-вывода. Если была выбрана другая форма уведомления, то использование параметра hEvent структуры WSAOVERLAPPED отличается, а параметр fWait имеет значение TRUE , что приводит к непредсказуемым результатам.
Если функция WSAGetOverlappedResult вызывается с параметром lpOverlapped, lpcbTransfer или lpdwFlags, равным NULL-указателю в Windows Vista, это приведет к нарушению доступа. Если функция WSAGetOverlappedResult вызывается с параметром lpOverlapped, lpcbTransfer или lpdwFlags, равным null-указателю в Windows Server 2003 и более ранних версиях, это приведет к возврату кода ошибки WSAEFAULT.
Windows 8.1 и Windows Server 2012 R2. Эта функция поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версий.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8.1, Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winsock2.h |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |