我应该在两个地方处理WSARecv()的错误吗?

时间:2015-02-27 13:50:23

标签: c++ sockets iocp

当我调用WSARecv()(或其他重叠的IO函数)时,我可能会立即收到错误,或者当我调用GetQueuedCompletionStatus()以使完成数据包出列时我会收到错误。

因此,假设我必须在这两个地方处理返回的错误(例如:WSAECONNABORTED),或者即使WSARecv()立即返回错误,我也会收到同样的错误调用GetQueuedCompletionStatus()时出错,所以我只能在一个地方处理它。

1 个答案:

答案 0 :(得分:1)

只有在SUCCESS返回或错误返回时,才会生成完成,结果错误为IO_PENDING。任何其他错误情况必须在相关API的呼叫站点处理,因此在WSARecv()呼叫站点处。一旦重叠操作开始(从原始API调用返回SUCCESSIO_PENDING),这也可能会失败并出现错误,该错误将通过GetQueuedCompletionStatus()的返回值报告。

所以,是的,你必须在正确的地方处理错误。