GetQueuedCompletionStatus()返回错误,说明I/O失败。此时调用GetLastError()得到的往往是ERROR_NETNAME_DELETED(64),WSAGetLastError()也一样,这显然不是真正的错误代码,那么怎么得到真正的错误代码呢?
给出下面的代码:
int YourIOCPClass::GetSockError(WSAOVERLAPPED* pWSAOVERLAPPED)
{
DWORD dwTrans;
DWORD dwFlags;
if(FALSE == WSAGetOverlappedResult(m_IOSock, pWSAOVERLAPPED, &dwTrans, FALSE, &dwFlags))
return WSAGetLastError();
else
return ERROR_SUCCESS;
}
使用了WSAGetOverlappedResult()函数,封装一下就可以用在代码里了:)
本文介绍了一种方法来获取Windows环境下I/O操作的真实错误代码,通过使用WSAGetOverlappedResult函数来代替GetQueuedCompletionStatus和GetLastError。这种方法能够帮助开发者更准确地定位网络编程中的错误。
1012

被折叠的 条评论
为什么被折叠?



