【问题标题】:Error handling in overlapped socket IO重叠套接字 IO 中的错误处理
【发布时间】:2011-05-13 21:54:34
【问题描述】:

在使用重叠的套接字 IO 和 IOCP 的情况下,任何人都可以建议一种可靠的方法来处理系统错误吗?

MSDN 在这方面的描述比较繁琐。它说对于 GetQueuedCompletionStatus 返回代码 FALSE 应该有一个后续的 GetLastError 调用来获取失败操作的错误代码。但是,我们知道,对于 WSA 函数,应该调用 WSAGetLastErrorGetLastError 在套接字错误时返回 0)。所以问题的第一部分是 - 它在实践中是如何工作的?

如果完成数据包由GetQueuedCompletionStatusEx 提取,另一个问题是处理错误。 MSDN 只描述了这个调用本身的错误处理,没有提到获取单个失败操作的错误代码。

提前感谢所有回复和 cmets。

【问题讨论】:

    标签: c++ windows winsock overlapped-io


    【解决方案1】:

    在用放大镜试验和研究 MSDN 几个小时后,我发现了以下内容:

    http://msdn.microsoft.com/en-us/library/ms684342%28v=VS.85%29.aspx(关于 OVERLAPPED 结构的文章,Internal 字段的描述):

    I/O 请求的错误代码。发出请求时,系统将此成员设置为 STATUS_PENDING 以指示操作尚未开始。当请求完成时,系统将此成员设置为已完成请求的错误代码。

    Internal 成员最初是为系统使用而保留的,它的行为可能会改变。

    最后一句话看起来不太好,但我猜它是这样的。

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多