如何获取getaddrinfo()错误代码?
从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
以获取代码?
是的,标准方法是使用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交叉引用。
雅你使用WSAGetLastError,这里是如何检索相应的字符串:https://stackoverflow.com/questions/3400922/how-do-i-retrieve-an-error-string-from-wsagetlasterror?rq=1 – Asesh
'它表示EAI错误代码可以在Windows套接字错误代码页面找到'。不,它没有。它在该MSDN页面上提供了映射*。* – EJP