Close connection during async_read on close frame:

fix #163
This commit is contained in:
Vinnie Falco
2016-11-01 09:01:02 -04:00
parent 644d518db5
commit d4ffde5982
3 changed files with 86 additions and 43 deletions
+9 -7
View File
@@ -162,6 +162,7 @@ operator()(error_code ec,std::size_t bytes_transferred, bool again)
do_pong = 11,
do_close_resume = 13,
do_close = 15,
do_teardown = 16,
do_fail = 18,
do_call_handler = 99
@@ -379,9 +380,8 @@ operator()(error_code ec,std::size_t bytes_transferred, bool again)
d.state = do_close;
break;
}
// call handler;
ec = error::closed;
goto upcall;
d.state = do_teardown;
break;
}
//------------------------------------------------------------------
@@ -454,7 +454,7 @@ operator()(error_code ec,std::size_t bytes_transferred, bool again)
//------------------------------------------------------------------
case do_close:
d.state = do_close + 1;
d.state = do_teardown;
d.ws.wr_close_ = true;
BOOST_ASSERT(! d.ws.wr_block_);
d.ws.wr_block_ = &d;
@@ -462,13 +462,15 @@ operator()(error_code ec,std::size_t bytes_transferred, bool again)
d.fb.data(), std::move(*this));
return;
case do_close + 1:
d.state = do_close + 2;
//------------------------------------------------------------------
case do_teardown:
d.state = do_teardown + 1;
websocket_helpers::call_async_teardown(
d.ws.next_layer(), std::move(*this));
return;
case do_close + 2:
case do_teardown + 1:
// call handler
ec = error::closed;
goto upcall;