クライアント数12000のTPCWによるhttps通信負荷を30分かける試験をすると,
30回に1回の割合でcoreを吐くか、SSLハンドシェイクエラーとなって
以降の通信が出来なくなる。
対処として、非同期なSSLのhandshake処理を実行している時、
read_some(), write_some()が実行されないようにする。
Signed-off-by: Hiroaki Nakano <nakano.hiroaki@nttcom.co.jp>
virtual std::size_t read_some(const boost::asio::mutable_buffers_1 &buffers, boost::system::error_code &error_code) {
boost::mutex::scoped_lock lock(ssl_mutex);
- if (write_con > 0) {
+ if (write_con > 0 || handshake_con > 0) {
error_code = boost::asio::error::try_again;
return 0;
}
virtual size_t write_some(const boost::asio::const_buffers_1 &buffer, boost::system::error_code &error_code) {
boost::mutex::scoped_lock lock(ssl_mutex);
- if (read_con > 0) {
+ if (read_con > 0 || handshake_con > 0) {
error_code = boost::asio::error::try_again;
return 0;
}