2

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

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

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

提前感谢所有回复和评论。

4

1 回答 1

2

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

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

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

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

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

于 2011-05-14T05:15:27.893 回答