C++ BIO_ctrl_pending()的异步OpenSSL问题

C++ BIO_ctrl_pending()的异步OpenSSL问题,c++,openssl,asyncsocket,C++,Openssl,Asyncsocket,我有一个包装OpenSSL的异步客户端和服务器应用程序。一旦创建,它们将分别调用SSL\u set\u connect\u state()/SSL\u set\u accept\u state()来初始化其内部状态。到目前为止,一切都正常运行。我假设一旦上述状态设置好,就可以开始握手了。我执行以下操作来初始化所述握手(片段): 现在,当我运行代码时,BIO_ctrl_pending()返回适当的数量(210),然后我的代码可以继续读取BIO并开始握手 我的问题是,这是OpenSSL中的某种错误,

我有一个包装OpenSSL的异步客户端和服务器应用程序。一旦创建,它们将分别调用SSL\u set\u connect\u state()/SSL\u set\u accept\u state()来初始化其内部状态。到目前为止,一切都正常运行。我假设一旦上述状态设置好,就可以开始握手了。我执行以下操作来初始化所述握手(片段):

现在,当我运行代码时,BIO_ctrl_pending()返回适当的数量(210),然后我的代码可以继续读取BIO并开始握手


我的问题是,这是OpenSSL中的某种错误,状态设置不正确吗??还是我遗漏了什么?

老问题,但在谷歌搜索openssl内容时不断出现,所以作为参考:

只需启动握手,而不是依靠peek/read在内部进行: 如果不是套接字bio,握手将失败,出现ssl错误,然后使用ctrl\u pending获取要读取的大小

大概是这样的:

    ret = SSL_do_handshake(client_side);
      if (ret < 0)
        if (SSL_ERROR_WANT_READ !=  SSL_get_error(client_side,ret))
            cout << "ERROR";


    ret = BIO_ctrl_pending(network_side); 
ret=SSL\u do\u握手(客户端);
如果(ret<0)
if(SSL\u错误\u想要\u读取!=SSL\u获取\u错误(客户端,ret))

cout这是一个老问题,但在谷歌搜索openssl内容时,这个问题会不断出现,所以作为参考:

只需启动握手,而不是依靠peek/read在内部进行: 如果不是套接字bio,握手将失败,出现ssl错误,然后使用ctrl\u pending获取要读取的大小

大概是这样的:

    ret = SSL_do_handshake(client_side);
      if (ret < 0)
        if (SSL_ERROR_WANT_READ !=  SSL_get_error(client_side,ret))
            cout << "ERROR";


    ret = BIO_ctrl_pending(network_side); 
ret=SSL\u do\u握手(客户端);
如果(ret<0)
if(SSL\u错误\u想要\u读取!=SSL\u获取\u错误(客户端,ret))

请解释一下:m_pOutBio是什么生物?此代码在哪一侧(服务器或客户端)运行?此代码在客户端运行。调用BIO_ctrl_pending()时,服务器端和客户端都会失败。当我直接调用BIO_read()时,它返回上述SSL错误。m_pOutBio的实例化使用:m_pOutBio=BIO_new(BIO_s_mem());在SSL内部,SSL_peek()函数调用s->handshake_func,其中s是我的SSL*对象。我想知道这是否与启动BIOs有关。请解释:m_pOutBio是什么生物?此代码在哪一侧(服务器或客户端)运行?此代码在客户端运行。调用BIO_ctrl_pending()时,服务器端和客户端都会失败。当我直接调用BIO_read()时,它返回上述SSL错误。m_pOutBio的实例化使用:m_pOutBio=BIO_new(BIO_s_mem());在SSL内部,SSL_peek()函数调用s->handshake_func,其中s是我的SSL*对象。我想知道这是否与启动BIOs有关。
    ret = SSL_do_handshake(client_side);
      if (ret < 0)
        if (SSL_ERROR_WANT_READ !=  SSL_get_error(client_side,ret))
            cout << "ERROR";


    ret = BIO_ctrl_pending(network_side);