当我调用WSARecv()
(或其他重叠的IO函数)时,我可能会立即收到错误,或者当我调用GetQueuedCompletionStatus()
以使完成数据包出列时我会收到错误。
因此,假设我必须在这两个地方处理返回的错误(例如:WSAECONNABORTED
),或者即使WSARecv()
立即返回错误,我也会收到同样的错误调用GetQueuedCompletionStatus()
时出错,所以我只能在一个地方处理它。
答案 0 :(得分:1)
只有在SUCCESS
返回或错误返回时,才会生成完成,结果错误为IO_PENDING
。任何其他错误情况必须在相关API的呼叫站点处理,因此在WSARecv()
呼叫站点处。一旦重叠操作开始(从原始API调用返回SUCCESS
或IO_PENDING
),这也可能会失败并出现错误,该错误将通过GetQueuedCompletionStatus()
的返回值报告。
所以,是的,你必须在正确的地方处理错误。