int rv = -1;
try
{
+ if (sendq.size() > 1 && sendq[0].length() < 1024)
+ {
+ // Avoid multiple repeated SSL encryption invocations
+ // This adds a single copy of the queue, but avoids
+ // much more overhead in terms of system calls invoked
+ // by the IOHook.
+ //
+ // 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);
+ }
while (!sendq.empty())
{
std::string& front = sendq.front();
void StreamSocket::WriteData(const std::string &data)
{
+ if (fd < 0)
+ {
+ ServerInstance->Logs->Log("SOCKET", DEBUG, "Attempt to write data to dead socket: %s",
+ data.c_str());
+ return;
+ }
bool newWrite = sendq.empty() && !data.empty();
/* Append the data to the back of the queue ready for writing */