タイトルは私の質問です。SSLを使用しないSSLソケットでの読み書き方法を強化するには?
私はすでにここにこれに関連するトピックを見つける - >Using SSL sockets and non-SSL sockets simultaneously in Boost.Asio?
をし、基本的に私は同じような状況にいるが、私はこれをやっているので、何らかの理由で、私はそこにコメント、および/または直接質問者に連絡ができませんでした新しい質問として
私は、クライアントが
socket_.async_handshake(ssl::stream_base::server, session::handle_handshake)
でうまく接続し、
async_write(socket_, buffer(send_data, send_length), session::handle_read)
socket_.async_read_some(buffer(recieved_data, max_length), session::handle_read)
で読み取り/書き込み可能に設定SSLソケットssl::stream<ip::tcp::socket> socket_;
を持っているしかし、今、私はソケットの同じタイプを使用したいですSSLを使用しない接続を構築します。
まず、上記のようにSSL接続で行われるように "ハンドシェイク"を行う方法がわかりません。
普通のboost.asioの例を見ると、非SSL接続の場合はそれをしなくても、受け入れられたらソケットに直接読み書きできると仮定します。
次に、上記のトピックで説明したようにして、SSL接続の有無を確認するために、セッションにブール値のsslを追加しました。
次に、非同期機能でsocket_
を使用する代わりに、socket_.lowest_layer()
を使用しました。コンパイラは、このソリューションを受け入れるdoes notのようですが
if (sslEnabled)
boost::asio::async_write(secureSocket_);
} else {
boost::asio::async_write(secureSocket_.lowest_layer());
}
:
は、ここで提案したコードです。私はこのエラーが現れるストリームとしてsocket_.lowest_layerを()は非同期機能を使用してコードをコンパイルしようとすると(のみasync_readため、async_writeは同様のものを持っているその):
boost\asio\impl\read.hpp(263): error C2039: 'async_read_some' : is not a member of 'boost::asio::basic_socket<Protocol,SocketService>'
with
[
Protocol=boost::asio::ip::tcp,
SocketService=boost::asio::stream_socket_service<boost::asio::ip::tcp>
]
boost\asio\impl\read.hpp(255) : while compiling class template member function 'void boost::asio::detail::read_op<AsyncReadStream,MutableBufferSequence,CompletionCondition,ReadHandler>::operator()(const boost::system::error_code &,size_t,int)'
with
[
AsyncReadStream=boost::asio::basic_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp>>,
MutableBufferSequence=boost::asio::mutable_buffers_1,
CompletionCondition=boost::asio::detail::transfer_all_t,
ReadHandler=boost::_bi::bind_t<void,boost::_mfi::mf2<void,CSocket,const boost::system::error_code &,size_t>,boost::_bi::list3<boost::_bi::value<CSocket *>,boost::arg<1>,boost::arg<2>>>
]
boost\asio\impl\read.hpp(527) : see reference to class template instantiation 'boost::asio::detail::read_op<AsyncReadStream,MutableBufferSequence,CompletionCondition,ReadHandler>' being compiled
with
[
AsyncReadStream=boost::asio::basic_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp>>,
MutableBufferSequence=boost::asio::mutable_buffers_1,
CompletionCondition=boost::asio::detail::transfer_all_t,
ReadHandler=boost::_bi::bind_t<void,boost::_mfi::mf2<void,CSocket,const boost::system::error_code &,size_t>,boost::_bi::list3<boost::_bi::value<CSocket *>,boost::arg<1>,boost::arg<2>>>
]
c:\asio_test\source\server.cpp(131) : see reference to function template instantiation 'void boost::asio::async_read<boost::asio::basic_socket<Protocol,SocketService>,boost::asio::mutable_buffers_1,boost::_bi::bind_t<R,F,L>>(AsyncReadStream &,const MutableBufferSequence &,const ReadHandler &)' being compiled
with
[
Protocol=boost::asio::ip::tcp,
SocketService=boost::asio::stream_socket_service<boost::asio::ip::tcp>,
R=void,
F=boost::_mfi::mf2<void,CSocket,const boost::system::error_code &,size_t>,
L=boost::_bi::list3<boost::_bi::value<CSocket *>,boost::arg<1>,boost::arg<2>>,
AsyncReadStream=boost::asio::basic_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp>>,
MutableBufferSequence=boost::asio::mutable_buffers_1,
ReadHandler=boost::_bi::bind_t<void,boost::_mfi::mf2<void,CSocket,const boost::system::error_code &,size_t>,boost::_bi::list3<boost::_bi::value<CSocket *>,boost::arg<1>,boost::arg<2>>>
]
Build FAILED.
をだから今私は私はあなたが私を助けることを願っています。エラーを検索すると何も起こらなかったし、おそらく動作するはずなので、間違いが何であるかわからない...