来自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
来获取代码?
答案 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手动交叉引用它们。