#include "inspircd.h"
-#include "socket.h"
-#include "inspstring.h"
-#include "socketengine.h"
#include "iohook.h"
#ifndef DISABLE_WRITEV
if (!SocketEngine::AddFd(this, FD_WANT_NO_READ | FD_WANT_SINGLE_WRITE | FD_WRITE_WILL_BLOCK))
return I_ERR_NOMOREFDS;
- this->Timeout = new SocketTimeout(this->GetFd(), this, timeout, ServerInstance->Time());
- ServerInstance->Timers->AddTimer(this->Timeout);
+ this->Timeout = new SocketTimeout(this->GetFd(), this, timeout);
+ ServerInstance->Timers.AddTimer(this->Timeout);
ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "BufferedSocket::DoConnect success");
return I_ERR_NONE;
std::string::size_type i = recvq.find(delim);
if (i == std::string::npos)
return false;
- line = recvq.substr(0, i);
- // TODO is this the most efficient way to split?
- recvq = recvq.substr(i + 1);
+ line.assign(recvq, 0, i);
+ recvq.erase(0, i + 1);
return true;
}
{
if (sendq.empty())
return;
- if (!error.empty() || fd < 0 || fd == INT_MAX)
+ if (!error.empty() || fd < 0)
{
ServerInstance->Logs->Log("SOCKET", LOG_DEBUG, "DoWrite on errored or closed socket");
return;
else if (rv < itemlen)
{
SocketEngine::ChangeEventMask(this, FD_WANT_FAST_WRITE | FD_WRITE_WILL_BLOCK);
- front = front.substr(rv);
+ front.erase(0, rv);
sendq_len -= rv;
return;
}
}
int rv_max = 0;
- iovec* iovecs = new iovec[bufcount];
- for(int i=0; i < bufcount; i++)
+ int rv;
{
- iovecs[i].iov_base = const_cast<char*>(sendq[i].data());
- iovecs[i].iov_len = sendq[i].length();
- rv_max += sendq[i].length();
+ iovec iovecs[MYIOV_MAX];
+ for (int i = 0; i < bufcount; i++)
+ {
+ iovecs[i].iov_base = const_cast<char*>(sendq[i].data());
+ iovecs[i].iov_len = sendq[i].length();
+ rv_max += sendq[i].length();
+ }
+ rv = writev(fd, iovecs, bufcount);
}
- int rv = writev(fd, iovecs, bufcount);
- delete[] iovecs;
if (rv == (int)sendq_len)
{
else
{
// stopped in the middle of this string
- front = front.substr(rv);
+ front.erase(0, rv);
rv = 0;
}
}
BufferedSocket::~BufferedSocket()
{
this->Close();
- if (Timeout)
- {
- // The timer is removed from the TimerManager in Timer::~Timer()
- delete Timeout;
- }
+ // The timer is removed from the TimerManager in Timer::~Timer()
+ delete Timeout;
}
void StreamSocket::HandleEvent(EventType et, int errornum)