aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/salticidae/conn.h6
-rw-r--r--src/conn.cpp4
2 files changed, 8 insertions, 2 deletions
diff --git a/include/salticidae/conn.h b/include/salticidae/conn.h
index 53d51a3..f290e3d 100644
--- a/include/salticidae/conn.h
+++ b/include/salticidae/conn.h
@@ -114,6 +114,12 @@ class SegBuffer {
_size += data.size();
buffer.push_back(buffer_entry_t(std::move(data)));
}
+
+ bytearray_t move_pop() {
+ auto res = std::move(buffer.front().data);
+ buffer.pop_front();
+ return std::move(res);
+ }
bytearray_t pop(size_t len) {
bytearray_t res;
diff --git a/src/conn.cpp b/src/conn.cpp
index d650b76..0607ed3 100644
--- a/src/conn.cpp
+++ b/src/conn.cpp
@@ -48,9 +48,9 @@ void ConnPool::Conn::send_data(evutil_socket_t fd, short events) {
if (!(events & EV_WRITE)) return;
auto conn = self(); /* pin the connection */
ssize_t ret = seg_buff_size;
- while (!send_buffer.empty() && ret == (ssize_t)seg_buff_size)
+ while (!send_buffer.empty())
{
- bytearray_t buff_seg = send_buffer.pop(seg_buff_size);
+ bytearray_t buff_seg = send_buffer.move_pop();
ssize_t size = buff_seg.size();
ret = send(fd, buff_seg.data(), size, MSG_NOSIGNAL);
SALTICIDAE_LOG_DEBUG("socket sent %zd bytes", ret);