在使用重叠套接字IO和IOCP的情况下,有人可以建议一种可靠的方法来处理系统错误吗?
MSDN描述在这方面很麻烦。它表示对于GetQueuedCompletionStatus
返回代码FALSE,应该进行后续GetLastError
调用以获取失败操作的错误代码。但是,我们知道对于WSA函数,应该调用WSAGetLastError
而不是(GetLastError
在套接字错误时返回0)。所以问题的第一部分是 - 它在实践中如何运作?
如果GetQueuedCompletionStatusEx
提取完成数据包,则另一个问题是处理错误。 MSDN仅描述了此调用本身的错误处理,并未提及有关获取各个失败操作的错误代码的信息。
提前感谢所有回复和评论。
答案 0 :(得分:1)
用放大镜试验和研究MSDN几个小时后,我发现了以下内容:
http://msdn.microsoft.com/en-us/library/ms684342%28v=VS.85%29.aspx(有关OVERLAPPED结构的文章,Internal
字段的说明):
I / O请求的错误代码。发出请求后,系统会将此成员设置为STATUS_PENDING以指示操作尚未启动。请求完成后,系统会将此成员设置为已完成请求的错误代码。
内部成员最初是为系统使用而保留的,其行为可能会发生变化。
最后一个短语看起来并不好,但我猜它就是它。