summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2013-06-19 21:53:12 +0200
committerattilamolnar <attilamolnar@hush.com>2013-07-07 23:10:45 +0200
commit7dd381f568938971e9c69a074def5da058d5c242 (patch)
tree190f6f0aae5c46e2220ab886aafdeb546575d94f
parent71d64de8f0b77d0025a7a48f72d1b63d96fb4bdc (diff)
Do not send too much data over SSL in one go
Some clients fail to read it entirely and the remaining data stays in their read buffer until new data arrives
-rw-r--r--src/inspsocket.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp
index d78ace318..410f928d9 100644
--- a/src/inspsocket.cpp
+++ b/src/inspsocket.cpp
@@ -248,11 +248,13 @@ void StreamSocket::DoWrite()
// The length limit of 1024 is to prevent merging strings
// more than once when writes begin to block.
std::string tmp;
- tmp.reserve(sendq_len);
- for(unsigned int i=0; i < sendq.size(); i++)
- tmp.append(sendq[i]);
- sendq.clear();
- sendq.push_back(tmp);
+ tmp.reserve(1280);
+ while (!sendq.empty() && tmp.length() < 1024)
+ {
+ tmp.append(sendq.front());
+ sendq.pop_front();
+ }
+ sendq.push_front(tmp);
}
std::string& front = sendq.front();
int itemlen = front.length();