From e9d069bbbbb94a3d4df7ea2500137a4c33dbc518 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nicolas.pope@utu.fi> Date: Wed, 8 Jun 2022 11:28:14 +0000 Subject: [PATCH] #18 Increase msgpack buffer if needed --- src/peer.cpp | 15 +++++++++------ src/peer.hpp | 4 +++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/peer.cpp b/src/peer.cpp index 3aac02d..7cb2217 100644 --- a/src/peer.cpp +++ b/src/peer.cpp @@ -288,21 +288,24 @@ void Peer::data() { int rc = 0; // Only need to lock and reserve buffer if there isn't enough - if (recv_buf_.buffer_capacity() < kMaxMessage) { + if (recv_buf_.buffer_capacity() < recv_buf_max_) { UNIQUE_LOCK(recv_mtx_, lk); - recv_buf_.reserve_buffer(kMaxMessage); + recv_buf_.reserve_buffer(recv_buf_max_); } - int cap = static_cast<int>(recv_buf_.buffer_capacity()); + size_t cap = recv_buf_.buffer_capacity(); try { rc = sock_->recv(recv_buf_.buffer(), recv_buf_.buffer_capacity()); - if (rc >= cap - 1) { + if (rc >= static_cast<int>(cap - 1)) { net_->_notifyError(this, Error::kBufferSize, "Too much data received"); - // TODO(Nick): Increase the buffer size next time + // Increase buffer size + if (recv_buf_max_ < kMaxMessage) { + recv_buf_max_ += 512 * 1024; + } } - if (cap < (kMaxMessage / 10)) { + if (cap < (recv_buf_max_ / 10)) { net_->_notifyError(this, Error::kBufferSize, "Buffer is at capacity"); } } catch (std::exception& ex) { diff --git a/src/peer.hpp b/src/peer.hpp index fb1a2ba..7541d89 100644 --- a/src/peer.hpp +++ b/src/peer.hpp @@ -213,7 +213,8 @@ class Peer { void data(); public: - static const int kMaxMessage = 2*1024*1024; // 10Mb currently + static const int kMaxMessage = 4*1024*1024; // 4Mb currently + static const int kDefaultMessage = 512*1024; // 0.5Mb currently private: // Functions bool socketError(); // Process one error from socket @@ -266,6 +267,7 @@ class Peer { std::atomic_flag recv_checked_ = ATOMIC_FLAG_INIT; msgpack::unpacker recv_buf_; + size_t recv_buf_max_ = kDefaultMessage; MUTEX recv_mtx_; // Send buffers -- GitLab