diff --git a/net/net_base.cpp b/net/net_base.cpp index 0764ace..ec6bd13 100644 --- a/net/net_base.cpp +++ b/net/net_base.cpp @@ -63,18 +63,16 @@ void CTcpClient::async_recv() } } else { buffer_.push(tmp_buf_.data(), length); - - bool done = true; - while (done) { + while (true) { auto* frame = CTransProtocal::parse(buffer_); if (frame) { if (fun_) { fun_(frame); } delete frame; - } else { - done = false; + continue; } + break; } async_recv(); } diff --git a/server/server.cpp b/server/server.cpp index c4a887b..a0e73a7 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -238,11 +238,15 @@ void CTcpServer::th_client(std::shared_ptr socket, const } cache->buffer_.push(cache->tmp_buf_.data(), length); - auto* frame = CTransProtocal::parse(cache->buffer_); - if (frame) { - frame->fid_ = client_key; - std::lock_guard lock(buf_mut_); - cache_.push_back(frame); + while (true) { + auto* frame = CTransProtocal::parse(cache->buffer_); + if (frame) { + frame->fid_ = client_key; + std::lock_guard lock(buf_mut_); + cache_.push_back(frame); + continue; + } + break; } } } catch (std::exception& e) {