1

私はこれらのtypedefを持っていますが、問題は、TSocketがTSecureSocketからTSocketへの直接キャストが機能するため、安全なソケットを渡す必要があるということです。または別の解決策はありますか?ポートによっては、ソケットを安全にしますが、そうでない場合もあります。リターンタイプはTSocketである必要があります。

  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;

私はこの boost::asioを安全なソケットに変換するのを見てきました

4

1 に答える 1

1

私はこれらの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でラップする必要がありますが、削除を許可できないため、それほど簡単ではない可能性があります。

于 2012-11-26T13:40:35.920 に答える