以下のコードを例外処理のあるループで実行しています。
using namespace boost::network;
http::client client;
http::client::request request("https://testserver.com/");
request << header("Connection", "close");
http::client::response response = client.get(request);
std::string strOutput = body(response);
コードは問題なく動作しますが、ネットワーク インターフェイスを無効にしてネットワーク障害が発生した場合にソフトウェアをテストすると、次のエラーが表示されます。
'boost::exception_detail::clone_impl >' what() のインスタンスをスローした後に呼び出された終了: ブースト スレッド: 自分自身に参加しようとしています: リソースのデッドロックが回避されました
このエラーをキャッチできないようです。このコードは 24 時間年中無休でステータス チェックを実行するため、ネットワーク エラーが発生したときに検出される可能性が高くなります。最悪の部分は、1 回、2 回、3 回、または 4 回試行した後に失敗する可能性があることです。ソケットを使用して HTTP プロトコルソケットを自分で実装することは本当に避けたいのですが、そうする必要があるかもしれません。何か案は?