未验证 提交 a609496b 编写于 作者: D Daniel Larimer 提交者: GitHub

Merge pull request #3459 from EOSIO/issue3458

Potential Fix #3458 - uncaught exceptions in bnet
...@@ -302,6 +302,7 @@ namespace eosio { ...@@ -302,6 +302,7 @@ namespace eosio {
void set_socket_options() { void set_socket_options() {
try {
/** to minimize latency when sending short messages */ /** to minimize latency when sending short messages */
_ws->next_layer().set_option( boost::asio::ip::tcp::no_delay(true) ); _ws->next_layer().set_option( boost::asio::ip::tcp::no_delay(true) );
...@@ -311,6 +312,9 @@ namespace eosio { ...@@ -311,6 +312,9 @@ namespace eosio {
*/ */
_ws->next_layer().set_option( boost::asio::socket_base::send_buffer_size( 1024*1024 ) ); _ws->next_layer().set_option( boost::asio::socket_base::send_buffer_size( 1024*1024 ) );
_ws->next_layer().set_option( boost::asio::socket_base::receive_buffer_size( 1024*1024 ) ); _ws->next_layer().set_option( boost::asio::socket_base::receive_buffer_size( 1024*1024 ) );
} catch ( ... ) {
elog( "uncaught exception on set socket options" );
}
} }
void run() { void run() {
...@@ -555,7 +559,6 @@ namespace eosio { ...@@ -555,7 +559,6 @@ namespace eosio {
void send( const bnet_message& msg ) { try { void send( const bnet_message& msg ) { try {
if( !_strand.running_in_this_thread() ) { elog( "wrong strand" ); } if( !_strand.running_in_this_thread() ) { elog( "wrong strand" ); }
FC_ASSERT( !_out_buffer.size() );
auto ps = fc::raw::pack_size(msg); auto ps = fc::raw::pack_size(msg);
_out_buffer.resize(ps); _out_buffer.resize(ps);
...@@ -770,9 +773,13 @@ namespace eosio { ...@@ -770,9 +773,13 @@ namespace eosio {
} }
void on_fail( boost::system::error_code ec, const char* what ) { void on_fail( boost::system::error_code ec, const char* what ) {
try {
if( !_strand.running_in_this_thread() ) { elog( "wrong strand" ); } if( !_strand.running_in_this_thread() ) { elog( "wrong strand" ); }
elog( "${w}: ${m}", ("w", what)("m", ec.message() ) ); elog( "${w}: ${m}", ("w", what)("m", ec.message() ) );
_ws->next_layer().close(); _ws->next_layer().close();
} catch ( ... ) {
elog( "uncaught exception on close" );
}
} }
void on_accept( boost::system::error_code ec ) { void on_accept( boost::system::error_code ec ) {
...@@ -815,10 +822,15 @@ namespace eosio { ...@@ -815,10 +822,15 @@ namespace eosio {
on_message( msg ); on_message( msg );
wait_on_app(); wait_on_app();
return;
} catch ( ... ) { } catch ( ... ) {
wlog( "close bad payload" ); wlog( "close bad payload" );
}
try {
_ws->close( boost::beast::websocket::close_code::bad_payload ); _ws->close( boost::beast::websocket::close_code::bad_payload );
} catch ( ... ) {
elog( "uncaught exception on close" );
} }
} }
...@@ -912,8 +924,12 @@ namespace eosio { ...@@ -912,8 +924,12 @@ namespace eosio {
} }
void do_goodbye( const string& reason ) { void do_goodbye( const string& reason ) {
try {
status( "goodbye - " + reason ); status( "goodbye - " + reason );
_ws->next_layer().close(); _ws->next_layer().close();
} catch ( ... ) {
elog( "uncaught exception on close" );
}
} }
void check_for_redundant_connection(); void check_for_redundant_connection();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册