問題タブ [asio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ssl - このエラー error:140000DB:SSL routines:SSL routines:short read は何を意味しますか
私たちのソフトウェアでは、この警告/エラー メッセージが断続的に表示され続けています。このメッセージがどのように/なぜ表示されるのかわかりません。
HTTP asio ハンドシェイクに失敗しました: エラー:140000DB:SSL ルーチン:SSL ルーチン:短い読み取り
インターネットで検索しましたが、ほとんどの結果は VMware の問題を示していました。私には当てはまりません。
実際にこのエラーが Boost-Asio で使用される OpenSSL によってスローされることが判明するまで。OpenSSL/Asio/Boost のソース コードをダウンロードしましたが、ソースにこのエラー コードが見つかりませんでした。私の質問ですが、このエラーの意味を知っている人はいますか? このエラー メッセージのトリガーは何ですか? 再現性を知るために少し理解したいだけです。そのため、ソフトウェアに穴があれば、ソフトウェアを修正できます。
よろしくお願いします!
参考: http: //ib-krajewski.blogspot.my/2016/03/https-support-for-casablanca-client.html
c++ - すでに破壊されたboost::asio::deadline_timerの発砲を回避する方法
boost::asio::deadline_timer
1 つの io_service オブジェクトで複数を使用しています。std::shared_ptr
ofは、インデックス付きboost::asio::deadline_timer
のコンテナーに格納されます。std::map<int, std::shared_ptr<debug_tim>> timers
タイマー ハンドラで、 other を消去しboost::asio::deadline_timer
ます。ただし、消去されたタイマーは成功エラー コードで起動されることが多いようです。
それを回避する方法はありますか。boost::asio::deadline_timer
消去されたものに対応するタイマーハンドラが常にで起動することを期待していOperation canceled
ます。
何か不足していますか?
動作を再現するコードは次のとおりです
https://wandbox.org/permlink/G0qzYcqauxdqw4i7
boost::asio::deadline_timer::cancel()
タイマーを消去する前にも呼び出します。しかし、私は同様の結果を得ました。キャンセルバージョンは次のとおりです。
https://wandbox.org/permlink/uM0yMFufkyn9ipdG
編集
フェリックス、答えてくれてありがとう。挙動は分かりboost::asio::deadline::timer::cancel()
ます。の寿命を常に気にする必要がありboost::asio::deadline::timer
ます。私のプロジェクトの実際のコードでは、「boost::asio::deadline::timer」は、セッション オブジェクトなどの別のオブジェクトのメンバー変数です。そして、タイマー ハンドラでは、オブジェクトにアクセスします。危ないです。
安全なコードの書き方を考えています。std::weak_ptr
そして、オブジェクトの寿命をチェックするためにusing を思いつきました。
更新されたコードは次のとおりです。
これは、削除されたオブジェクトへのアクセスを避ける良い方法boost::asio::deadline_timer
ですか?
編集
私のweak_ptrソリューションはうまく機能します。