加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用SSL的boost :: asio – SSL错误后的问题

发布时间:2020-12-16 09:30:42 所属栏目:百科 来源:网络整理
导读:我在我的应用程序中使用同步boost :: asio SSL套接字.我初始化所有参数然后连接到一些主机(一个接一个)并为每个主机执行GET请求. 一切正常,直到我得到一个主机的“404 – Not Found”错误.发生此错误后,所有新连接都会因某些未指定的SSL错误而失败. 我是否必
我在我的应用程序中使用同步boost :: asio SSL套接字.我初始化所有参数然后连接到一些主机(一个接一个)并为每个主机执行GET请求.

一切正常,直到我得到一个主机的“404 – Not Found”错误.发生此错误后,所有新连接都会因某些未指定的SSL错误而失败.

我是否必须以某种方式重置ssl :: stream?是否可以在每次连接后重新初始化ssl :: stream?

在下面的代码片段中,我删除了错误处理和所有非asio相关的事情.

主要:

asio::io_service ioservice;
asio::ssl::context ctx(ioservice,asio::ssl::context::sslv23);
ctx.set_verify_mode(asio::ssl::context::verify_none);

Connector *con = new Connector(ioservice,ctx);

while (!iplist.empty())
{
    ...
    con->ssl_connect(ipaddress,port);
    ...
}

连接器:

Connector::Connector(asio::io_service& io_service,asio::ssl::context &ctx) 
    : sslSock(io_service,ctx)
{
}

Connector::ssl_connect(std::string ipAdr,std::string port)
{
    ...
    tcp::resolver resolver(ioserv);
    tcp::resolver::query query(ipAdr,port);
    endpoint_iterator = resolver.resolve(query);
    ...

    asio::error_code errorcode = asio::error::host_not_found;
    tcp::resolver::iterator end;

    // Establish connection
    while (errorcode && endpoint_iterator != end)
    {
        sslSock.lowest_layer().close();
        sslSock.lowest_layer().connect(*endpoint_iterator++,errorcode);
    }
    sslSock.handshake(asio::ssl::stream_base::client,errorcode);
    ...
    asio::write(...);
    ...
    asio::read(...);
    ...
    sslSock.lowest_layer().close();
    ...
    return;
}

解决方法

我从asio邮件列表中得到了答案(非常感谢Marsh Ray). Sam Miller是正确的,因为每次都必须创建asio :: ssl :: context.为此,使用std :: auto_ptr.

Connector.h:

std::auto_ptr<asio::ssl::stream<tcp::socket>> sslSock;

Connector.cpp:

asio::ssl::context ctx(ioserv,asio::ssl::context::sslv23);
ctx.set_verify_mode(asio::ssl::context::verify_none);
sslSock.reset(new asio::ssl::stream<tcp::socket>(ioserv,ctx));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读