我在这里看到了一个Winsock错误代码列表 http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx
但是当我拨打WSAGetLastError()
时,结果是-2147014848(或0x80072740)
你如何将两者联系起来? 感谢
答案 0 :(得分:0)
这是一个HRESULT
样式的Microsoft错误代码。低16位是错误代码。设置高位,即严重性位。这表示失败,当然如果解释为带符号的32位整数,它会使值为负。
高16位(高5位的减号,即标志)是设施代码。
见这里:http://en.wikipedia.org/wiki/HRESULT
所以这是一个错误,在设施7中,其编号为0x2740或10048。
那就是(感谢http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668%28v=vs.85%29.aspx)
ta daa:{WSA}EADDRINUSE
你去。
答案 1 :(得分:0)
根据Microsoft's documentation for Windows Socket 2,
<块引用>"[...] 可以通过调用 WSAGetLastError
函数检索特定的错误编号 [并且] 可以将 Winsock 错误代码转换为 HRESULT
以用于远程使用 HRESULT_FROM_WIN32
的过程调用 (RPC)。”
我同意 @Kaz 的回答,即您收到的 0x80072740
错误代码似乎是 HRESULT
,但是,这里感觉有些不对劲,唯一的事实是您甚至得到一个 HRESULT
。在调用 WSAGetLastError()
时,根据我的理解,您基本上应该在所有情况下都返回 Win32 状态代码。我没有看到任何发布的代码,所以我不能完全确定您没有先将代码转换为 HRESULT。
但是,在检索 Windows Socket API (WSA) 错误代码时,使用以下语句最安全:
/* A WSA function indicated an error above. */
Result = HRESULT_FROM_WIN32 (WSAGetLastError ());
这与使用普通函数 GetLastError()
时类似,它返回一个明确的 Win32 状态代码。
通过使用此语句,您可以保证您始终在处理 HRESULT
。此外,即使 WSAGetLastError()
有时返回 HRESULT
,调用宏函数 HRESULT_FROM_WIN32
也只会返回相同的 HRESULT
未修改(参见实际的 HRESULT_FROM_WIN32
定义 {{ 3}}).
最后,在尝试找出特定的 Microsoft Windows 特定错误代码时,我建议使用以下错误代码查找站点:here。您提供的错误代码是指错误代码 WSAEADDRINUSE
(0x80072740
):
“通常每个套接字地址(协议/网络地址/端口)只允许使用一次。”