Sockets 如何将WSAGetLastError与套接字错误代码关联
我在这里看到Winsock错误代码列表 但是当我调用Sockets 如何将WSAGetLastError与套接字错误代码关联,sockets,winsock,Sockets,Winsock,我在这里看到Winsock错误代码列表 但是当我调用WSAGetLastError()时,结果是-2147014848(或0x80072740) 你如何将两者联系起来? 谢谢这是一个HRESULT风格的Microsoft错误代码。低16位是错误代码。设置高位,即严重性位。这表示失败,当然,如果解释为有符号32位整数,则会使值为负 高16位(减去高5位,即标志)是设施代码 请看这里: 这是设施7中的一个错误,其编号为0x2740或10048 这将是(感谢) ta daa:{WSA}EADDRIN
WSAGetLastError()
时,结果是-2147014848(或0x80072740)
你如何将两者联系起来?
谢谢这是一个
HRESULT
风格的Microsoft错误代码。低16位是错误代码。设置高位,即严重性位。这表示失败,当然,如果解释为有符号32位整数,则会使值为负
高16位(减去高5位,即标志)是设施代码
请看这里:
这是设施7中的一个错误,其编号为0x2740或10048
这将是(感谢)
ta daa:{WSA}EADDRINUSE
好了。根据
“[…]通过调用WSAGetLastError
函数可以检索特定的错误号,[并且]Winsock错误代码可以转换为HRESULT
,以便在远程过程调用(RPC)中使用HRESULT\u FROM\u WIN32
”
我同意您的回答,即您收到的0x80072740
的错误代码似乎是HRESULT
,但是,您甚至得到了HRESULT
,这让人感觉有些不对劲。调用WSAGetLastError()时,根据我的理解,在任何情况下,您都应该返回Win32状态代码。我没有看到任何发布的代码,因此我不能完全肯定您没有首先将代码转换为HRESULT
但是,在检索回Windows套接字API(WSA)错误代码时,使用以下语句是最安全的:
/* A WSA function indicated an error above. */
Result = HRESULT_FROM_WIN32 (WSAGetLastError ());
这与使用普通函数GetLastError()
时类似,该函数返回一个明确的Win32状态代码
通过使用此语句,您可以确保始终处理HRESULT
。此外,即使有时WSAGetLastError()
返回HRESULT
,从\u WIN32调用宏函数HRESULT\u只会返回相同的HRESULT
未经修改的结果(请参阅\u WIN32
定义中的实际HRESULT\u)
最后,当试图找出特定于Microsoft Windows的错误代码时,我建议使用以下错误代码查找站点:。您提供的错误代码是指错误代码WSAEADDRINUSE
(0x80072740
):
“每个套接字地址(协议/网络地址/端口)通常只允许使用一次。”