私はこれらのtypedefを持っています
typedef boost::asio::ip::tcp::socket TBoostSocket;
typedef boost::asio::ssl::stream<TBoostSocket> TSLLSocket;
typedef boost::shared_ptr<TBoostSocket> TSocket;
typedef boost::shared_ptr<TSLLSocket> TSecureSocket;
問題は、安全なソケットをTSocketとして渡す必要があることです。TSecureSocketからTSocketへの直接キャストは機能しますか?
短い答えいいえboost::asio::ssl::stream<TBoostSocket>
。ソケットを包むからです。
または別の解決策はありますか?ポートによっては、ソケットを安全にします。他のポートによっては、リターンタイプをTSocketにする必要はありません。
ただしTSLLSocket
(またはboost :: asio :: ssl :: streamではなく)、インスタンスからソケットを取得するためのメソッドを提供します。
const next_layer_type & next_layer() const;
http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ssl__stream/next_layer/overload1.html
ここnext_layer_type
で、は次のtypedefによって定義されます。
typedef boost::remove_reference< Stream >::type next_layer_type;
http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ssl__stream/next_layer_type.html
テンプレートを定義するので、それを使用しTBoostSocket
て電話をかけたときに取得する必要がありますnext_layer()
。lowest_layer()
もちろん、これはポインタではなく参照を返し、その参照はあなたが所有していないインスタンスへの参照です。したがって、これをshared_ptrでラップする必要がありますが、削除を許可できないため、それほど簡単ではない可能性があります。