WSAGetLastError()只是GetLastError()的别名吗?

在我的代码中,我有I / O完成端口的asynchronousI / O,对于读/写完成callback,我得到一个HANDLE(当然可以是套接字,文件句柄,命名pipe道等等)。 所以如果在这样的例程中出现错误,我想检查错误,但是如何知道它是一个“networking”HANDLE [一个SOCKET,所以我应该调用WSAGetLastError()]或者一个“非networking”HANDLE [命名pipe道,文件等等,所以我应该调用GetLastError()]? 我为此使用了一个简单的标志,但是它的丑陋和不方便。 如果有人可以确认WSAGetLastError()只是GetLastError()的别名,我将只使用后者。

看起来如此:

http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.networks/2007-08/msg00034.html

http://us.generation-nt.com/wsagetlasterror-just-an-alias-getlasterror-help-28256642.html

但有人可以证实吗? MSDN在这个话题上不是很清楚。

和:使用GetLastError()而不是WSAGetLastError()是安全的? 我的意思是,如果WSAGetLastError()甚至是自Windows95作为别人声称的GetLastError()的别名,我可以假设它对于下一个版本的Windows将是真实的 – 但是我们不能在假设东西时编写好的代码:)

它只是一个GetLastError的包装,如果你逆向工程ws2_32.dll,你会发现它。

有两个相似功能的原因: http : //blogs.msdn.com/b/oldnewthing/archive/2005/09/08/462402.aspx

为什么函数WSASetLastError存在已经完美的函数SetLastError?

其实,如果你坐下来想一想,你也知道答案。

Winsock最初是为了在16位Windows和32位Windows上运行而开发的。 注意经典的Winsock函数是如何基于异步通知的窗口消息的。 在16位的世界里,没有SetLastError函数。 因此,Winsock必须为16位实现提供自己的版本。 而且由于源代码兼容性很重要,所以还有一个32位版本。 当然,如果你不知道16位版本的话,32位版本看起来有点笨。