获取WSA错误代码的格式化消息

时间:2011-01-08 10:23:26

标签: c++ winsock2

我在win32 c ++应用程序中使用winsock2。我将使用MessageBox显示我可以通过调用WSAGetLastError()来检索的网络错误。我怎样才能做到这一点?我看到了FormatMessage,但我不明白如何使用它

3 个答案:

答案 0 :(得分:4)

以下是例如,以下内容在系统的消息表中搜索错误代码,并将格式化的消息放在LPTSTR Error缓冲区中。

// Create a reliable, stream socket using TCP.

if ((sockClient = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
 DWORD err = GetLastError();
 LPTSTR Error = 0;

if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
       NULL,
       err,
       0,
       (LPTSTR)&Error,
       0,
       NULL) == 0)
  {
     // Failed in translating the error.
  }
}

答案 1 :(得分:1)

答案 2 :(得分:0)

在C ++ 11中,您可以使用:

std::system_category().message(WSAGetLastError());

以std :: string的形式获取消息,并避免所有讨厌的缓冲内容:)

请参见the function documentationthis answer that uses it to throw exceptions