在我的代码中,我具有带有I/O完成端口的异步I/O,对于读/写完成回调,我得到了HANDLE(当然可以是套接字,文件句柄,命名管道等)。

因此,如果此类例程中出现问题,我想检查该错误,但如何确定其是“网络” HANDLE(一个SOCKET,所以我应该调用WSAGetLastError())还是一个“非网络” HANDLE(命名为管道,文件依此类推,所以我应该调用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()是否安全?我的意思是,如果有人声称Windows95以来WSAGetLastError()甚至是GetLastError()的别名,我都可以假定它对于下一版本的Windows都是正确的-但我们不能在假设情况下编写好的代码:)

最佳答案

如果您对ws2_32.dll进行反向工程,那么它只是GetLastError的包装,您将找到它。

10-07 17:05