库功能所需的标准输入未阻止调试控制台

时间:2019-07-17 01:05:05

标签: c++ c linux visual-studio-2017 openssl

每个代码都可以正常运行。使用Visual Studio进行调试是个问题

我正在使用带有c ++ 11的openSSL库制作Linux服务器。

服务器在VMware的CentOS上运行。 (完成后将移至Azure)

我在Visual Studio 2017上工作,并与该CentOS交叉编译。

当我打电话

int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);

此功能在ssl库中,它将打开私钥文件,在标准输入中要求我输入密码,在标准输出中显示消息并等待我的输入。

但是,如果我在Visual Studio调试模式下运行,它将消失。

当我在CentOS上使用.out文件,并且该'.out'文件由Visual Studio编译以进行调试时,效果很好。

这不是路径问题。 “ .crt”文件可以很好地打开,而同一文件夹中只有“ .key”文件不能很好地打开。

这些是发生问题的代码。 SslUtil,ExceptionSslUtil类在我自己的代码中。但是此代码中的所有其他功能和结构都在ssl库中。

void SslUtil::InitAsServer(const char* pathCert, const char* pathKey) {
    amIServer = true;
    SSL_load_error_strings();
    SSLeay_add_ssl_algorithms();
    meth = SSLv23_server_method();
    ctx = SSL_CTX_new(meth);

    if (!ctx)
        throw ExceptionSslUtil("ctx create error");
    if (SSL_CTX_use_certificate_file(ctx, pathCert, SSL_FILETYPE_PEM) <= 0)
        throw ExceptionSslUtil("cert file open error");
    if (SSL_CTX_use_PrivateKey_file( ctx, pathKey, SSL_FILETYPE_PEM) <= 0)// here's the problem.
        throw ExceptionSslUtil("private key file open error");
    if (!SSL_CTX_check_private_key(ctx))
        throw ExceptionSslUtil("Private key does not match the certificate public keyn");                                                                                                                                       
    return;
}

未阻止SSL_CTX_use_PrivateKey_file函数的输入,仅返回负值。它必须等待输入,而不必等待。

我不知道那里发生了什么。 以前有效,

但是当我将原始main(argc,argv)函数更改为mainSslEpoll(argc,argv)并使其被其他main函数调用时,会发生此问题...为什么? 以下是我的新主要功能。

int main(int argc, char** argv) {
    string str;
    while (true) {
        cout << "select mode" << endl;
        cout << "\t" << "0:SSL + Epoll server" << endl;
        cout << "\t" << "1:SSL server" << endl;
        cout << "\t" << "2:SSL client" << endl;
        cin >> str;
        if (str[0] == '0') return mainSslEpoll(argc, argv);
        if (str[0] == '1') return mainSslServer(argc, argv);
        if (str[0] == '2') return mainSslClient(argc, argv);
    }
}

0 个答案:

没有答案