【发布时间】:2015-02-27 15:47:00
【问题描述】:
有两个原因会导致GetQueuedCompletionStatus()失败(返回FALSE),第一个是因为与其关联的完成端口句柄在调用未完成时关闭,如果lpOverlapped就会出现这种情况是NULL。
第二个原因(这是我关心的一个)是如果 IO 操作(例如:WSARecv())失败。这就是文档对这种情况的描述:
如果 *lpOverlapped 不为 NULL 并且函数将完成出列 来自完成端口的失败 I/O 操作的数据包, 函数将有关失败操作的信息存储在 lpNumberOfBytes、lpCompletionKey 和 lp重叠。要获取扩展的错误信息,请调用 GetLastError。
我发现这对于lpNumberOfBytes、lpCompletionKey 和lpOverlapped 的值将是什么不是很清楚。这些参数是否包含我在调用WSARecv() 时提供的相同值?我想这更有可能是因为我想怎么知道是什么 IO 操作导致了失败!
【问题讨论】: