重叠套接字IO中的错误处理

时间:2011-05-13 21:54:34

标签: c++ windows winsock overlapped-io

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

MSDN描述在这方面很麻烦。它表示对于GetQueuedCompletionStatus返回代码FALSE,应该进行后续GetLastError调用以获取失败操作的错误代码。但是,我们知道对于WSA函数,应该调用WSAGetLastError而不是(GetLastError在套接字错误时返回0)。所以问题的第一部分是 - 它在实践中如何运作?

如果GetQueuedCompletionStatusEx提取完成数据包,则另一个问题是处理错误。 MSDN仅描述了此调用本身的错误处理,并未提及有关获取各个失败操作的错误代码的信息。

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

1 个答案:

答案 0 :(得分:1)

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

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

  

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

     

内部成员最初是为系统使用而保留的,其行为可能会发生变化。

最后一个短语看起来并不好,但我猜它就是它。