2017-08-08 79 views
-1

Winsock Reference page,它说:如何获取getaddrinfo()错误代码?

getaddrinfo函数

返回值

成功返回零。失败返回一个非零的Windows套接字错误代码,如在Windows套接字错误代码中找到的

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

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

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

+0

雅你使用WSAGetLastError,这里是如何检索相应的字符串:https://stackoverflow.com/questions/3400922/how-do-i-retrieve-an-error-string-from-wsagetlasterror?rq=1 – Asesh

+0

'它表示EAI错误代码可以在Windows套接字错误代码页面找到'。不,它没有。它在该MSDN页面上提供了映射*。* – EJP

回答

1

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

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

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

或者,您可以手动将它们与this nice big list交叉引用。