我应该在两个地方处理 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()
调用站点处理。一旦重叠操作开始(SUCCESS
或 IO_PENDING
return 来自原始 API 调用),那么这也可能会失败,并通过 return 来自 GetQueuedCompletionStatus()
.
的值
所以,是的,您必须在正确的地方处理错误。
当我调用 WSARecv()
(或另一个 Overlapped IO 函数)时,我可能会立即收到错误,或者当我调用 GetQueuedCompletionStatus()
使完成数据包出队时可能会收到错误。
那么假设我必须在这两个地方处理返回的错误(例如:WSAECONNABORTED
)是否准确,或者即使WSARecv()
立即返回错误,我也会收到调用 GetQueuedCompletionStatus()
时出现同样的错误,所以我只能在一个地方处理它。
仅当您有 SUCCESS
return 或错误 return 时才会生成完成,其中结果错误为 IO_PENDING
。任何其他错误情况都必须在相关 API 的调用站点处理,因此在 WSARecv()
调用站点处理。一旦重叠操作开始(SUCCESS
或 IO_PENDING
return 来自原始 API 调用),那么这也可能会失败,并通过 return 来自 GetQueuedCompletionStatus()
.
所以,是的,您必须在正确的地方处理错误。