我在我的應用程序中使用了同步boost :: asio SSL套接字。我初始化所有參數,然後連接到一些主機(一個接一個),併爲每個主機做一個GET請求。使用SSL的boost :: asio - SSL錯誤後的問題
一切正常,直到我得到一個「404 - 找不到」錯誤的主機之一。出現此錯誤後,所有新連接都會失敗並出現一些未指定的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;
}
「某些未指定的SSL錯誤」不是非常有用的信息。 OpenSSL提供非常好的錯誤消息,如果你想檢查它們(例如''ERR_print_errors_fp()')。 – caf 2010-11-08 14:42:20
@caf - 感謝您的信息。 Asio只寫「SSL錯誤」。我將檢查OpenSSL是否有更多的信息 – mspoerr 2010-11-08 22:00:01
@Sam Miller:是的,我有處理所有返回代碼和異常的處理程序。 – mspoerr 2010-11-08 22:00:51