WPUCompleteOverlappedRequest 函数针对重叠的 I/O作执行重叠的 I/O 完成通知。
Syntax
int WPUCompleteOverlappedRequest(
[in] SOCKET s,
[in] LPWSAOVERLAPPED lpOverlapped,
[in] DWORD dwError,
[in] DWORD cbTransferred,
[out] LPINT lpErrno
);
参数
[in] s
由 WPUCreateSocketHandle 创建的服务提供商套接字。
[in] lpOverlapped
指向与要通知完成的重叠 I/O作关联的 WSAOVERLAPPED 结构的指针。
[in] dwError
要通知其完成状态的重叠 I/O作的完成状态。
[in] cbTransferred
传输到客户端缓冲区或从客户端缓冲区传输的字节数(传输方向取决于要通知其完成的重叠 I/O作的发送或接收性质)。
[out] lpErrno
指向此函数执行生成的错误代码的指针。
返回值
如果未发生错误,WPUCompleteOverlappedRequest 将返回零,并根据客户端选择的机制通知重叠 I/O作的完成情况(指示在 lpOverlapped 引用的 WSAOVERLAPPED 结构中找到的事件,并且/或将完成状态报告排队到与套接字关联的完成端口(如果关联完成端口)。 否则, WPUCompleteOverlappedRequest 返回SOCKET_ERROR,并且 lpErrno 中提供了特定的错误代码。
| 错误代码 | Meaning |
|---|---|
| 传入 s 参数的套接字不是 WPUCreateSocketHandle 创建的套接字。 |
注解
WPUCompleteOverlappedRequest 函数对重叠的 I/O作执行重叠 I/O 完成通知,其中客户端指定的完成机制不是用户模式-异步过程调用(APC)。 此函数只能用于 WPUCreateSocketHandle 创建的套接字句柄。
如果客户端选择用户模式 APC 作为通知方法,服务提供商应使用 WPUQueueApc 或其他适当的作系统功能来执行完成通知。 如果客户端未选择用户模式 APC,则不直接实现 IFS 功能的服务提供商无法确定客户端是否与套接字句柄关联完成端口。 因此,它无法确定完成通知方法应将完成状态记录排队到完成端口,还是向 WSAOVERLAPPED 结构中找到的事件发出信号。 Windows 套接字 2 体系结构跟踪与 WPUCreateSocketHandle 创建的套接字的任何完成端口关联,并且可以在基于端口的完成通知或基于事件的通知之间进行正确的决策。
当 WPUCompleteOverlappedRequest 排队完成指示时,它将 WSAOVERLAPPED 结构的 InternalHigh 成员设置为传输的字节数。 然后,它将 内部 成员设置为非特殊值WSS_OPERATION_IN_PROGRESS的某些依赖于 OS 的值。 WPUCompleteOverlappedRequest 返回这些值之前可能会有一些轻微的延迟,因为处理可能会异步发生。 但是,在设置 InternalHigh 值(字节计数)时,可以保证设置 InternalHigh 值。
WPUCompleteOverlappedRequest 按状态工作(按客户端请求执行完成通知),无论套接字句柄是否与完成端口相关联。
与 WSPGetOverlappedResult 交互
WPUCompleteOverlappedRequest 的行为对服务提供商实现 WSPGetOverlappedResult 的方式存在一些约束,因为 WSAOVERLAPPED 结构的 Offset 和 OffsetHigh 成员只能由服务提供商控制,但必须通过 WSPGetOverlappedResult 从结构中检索三个值(字节计数、标志和错误)。 只要服务提供商与 WPUCompleteOverlappedRequest 的行为正确交互,服务提供程序可以采用任何选择的方式实现此目的。 但是,典型的实现如下所示:
- 在重叠处理开始时,服务提供商会将 内部 设置为WSS_OPERATION_IN_PROGRESS。
- 完成 I/O作后,提供程序会将 OffsetHigh 设置为作生成的 Windows 套接字 2 错误代码,将 偏移 设置为 I/O作生成的标志,并调用 WPUCompleteOverlappedRequest,将传输字节计数作为参数之一传递。 WPUCompleteOverlappedRequest 最终将 InternalHigh 设置为传输字节计数,然后将 Internal 设置为除WSS_OPERATION_IN_PROGRESS以外的值。
- 调用 WSPGetOverlappedResult 时,服务提供商会检查 内部。 如果WSS_OPERATION_IN_PROGRESS,提供程序将等待 hEvent 成员中的事件句柄,或者根据 WSPGetOverlappedResult 的 FWAIT 标志设置返回错误。 如果未进行中或等待完成后,提供程序将返回 InternalHigh、 OffsetHigh 和 Offset 中的值作为传输计数、作结果错误代码和标志。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
| 支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
| 目标平台 | Windows操作系统 |
| Header | ws2spi.h |
| Library | mincore.lib |