如何获取getaddrinfo()错误代码?

时间:2017-08-08 07:02:25

标签: c++ sockets winapi winsock

来自Winsock Reference page,它说:

  

getaddrinfo函数

     

返回值

     

成功归零。失败返回非零Windows套接字错误代码,如Windows套接字错误代码中的

     

使用gai_strerror函数根据 getaddrinfo函数返回的EAI代码打印错误消息。提供gai_strerror函数是为了符合IETF建议,但它不是线程安全的。 因此,建议使用传统的Windows套接字函数,例如WSAGetLastError。

它说可以在Windows Sockets Error Codes page中找到EAI错误代码,但我在该页面中看不到任何EAI代码,例如EAI_AGAIN,EAI_BADFLAGS等......

对于Windows,获取代码的正确方法是检查getaddrinfo是否返回非零值,然后调用WSAGetLastError来获取代码?

1 个答案:

答案 0 :(得分:1)

是的,标准方法是使用getaddrinfo,如果它返回非零值,则调用WSAGetLastError以检索Winsock错误代码。

然后,您可以使用FormatMessage将错误代码转换为人类可读的字符串,方法是将FORMAT_MESSAGE_FROM_SYSTEM作为dwFlags参数传递,将错误代码作为dwMessage传递参数。您可以在FORMAT_MESSAGE_FROM_SYSTEM下的表格中查看此行为的文档here。 Asesh指出this link有一些示例代码证明了这一点。

您可以在Linux系统上使用gai_strerror,但according to MSDN(搜索gai_strerror),它不是线程安全的,因此首选FormatMessage

或者,您只需使用this nice big list手动交叉引用它们。