OSDN Git Service

ticket 29143 SSLハンドシェイクエラー対処
authorHiroaki Nakano <nakano.hiroaki@nttcom.co.jp>
Mon, 30 Jul 2012 07:06:55 +0000 (16:06 +0900)
committerHiroaki Nakano <nakano.hiroaki@nttcom.co.jp>
Mon, 30 Jul 2012 07:06:55 +0000 (16:06 +0900)
クライアント数12000のTPCWによるhttps通信負荷を30分かける試験をすると,
30回に1回の割合でcoreを吐くか、SSLハンドシェイクエラーとなって
以降の通信が出来なくなる。

対処として、非同期なSSLのhandshake処理を実行している時、
read_some(), write_some()が実行されないようにする。

Signed-off-by: Hiroaki Nakano <nakano.hiroaki@nttcom.co.jp>
l7vsd/include/tcp_ssl_socket.h

index 5bed949..0d5eb87 100644 (file)
@@ -131,7 +131,7 @@ public:
 
         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;
                 }
@@ -150,7 +150,7 @@ public:
         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;
                 }