Сервер падает, когда клиент отключается во время чтения
void Session::start() {
socket_.async_read_some(boost::asio::buffer(buf_),
[this](error_code ec, size_t n) { onRead(ec, n); });
}
// в сервере:
sessions_.erase(id); // при отключении, удаляет std::unique_ptr<Session>
При массовых отключениях сервер падает внутри onRead на обращении к buf_. Как правильно управлять временем жизни сессии?
- Захватывать shared_from_this() в обработчики
- Проверять this != nullptr в начале onRead
- Удалять сессию из деструктора сокета
- Захватывать this по ссылке вместо значения
