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

Should I handle the error of WSARecv() in two places?

当我调用 WSARecv()(或另一个 Overlapped IO 函数)时,我可能会立即收到错误,或者当我调用 GetQueuedCompletionStatus() 使完成数据包出队时可能会收到错误。

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

仅当您有 SUCCESS return 或错误 return 时才会生成完成,其中结果错误为 IO_PENDING。任何其他错误情况都必须在相关 API 的调用站点处理,因此在 WSARecv() 调用站点处理。一旦重叠操作开始(SUCCESSIO_PENDING return 来自原始 API 调用),那么这也可能会失败,并通过 return 来自 GetQueuedCompletionStatus().

的值

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