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)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |