我正在将linux套接字库转换为Windows,但是winsock没有hstrerror()函数。 hstrerror()将采用h_errno并吐出一个错误字符串。我认为类似于 panic 。我环顾四周,但没人真正说出要替换的内容。除了“已弃用,而改为使用getaddrinfo()getnameinfo()”之外,我没有发现任何有关替换hstrerror的内容。具体来说,我有一个使用它的异常类。代码如下:

//
// class socket_h_error
// subclass to record status of extern int h_errno variable
//

class socket_h_error : public socket_error {
public:
    int host_errno;
    //TODO: replace hstrerror()
    explicit socket_h_error(const string& what) :
        socket_error(what + ": " + hstrerror(h_errno)),
        host_errno(h_errno) {}

};

我确实必须替换strerror(),但是我没有提到有可能替换hstrerror()。它在winsock2库中也不存在,因此我没有MS提出建议。

最佳答案

使用WSAGetLastError()FormatMessage()

MSDN中所有与Winsock相关的功能中都明确提到了WSAGetLastError()。

10-05 23:35