Archived
1
0

correct buffering

This commit is contained in:
Jeff Becker 2018-05-03 14:05:35 -04:00
parent 0c41298fe0
commit b227bf6ff1
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05
3 changed files with 21 additions and 13 deletions

View File

@ -47,7 +47,7 @@ public:
private:
size_t conns;
int epollfd;
char readbuf[2048];
char readbuf[128];
};
}

View File

@ -151,23 +151,30 @@ void Mainloop::Run()
}
if(ev->events & EPOLLIN && handler->readable())
{
int readed = handler->read(readbuf, sizeof(readbuf));
if(readed == -1)
bool errored = false;
while(true)
{
if(errno != EAGAIN)
int readed = handler->read(readbuf, sizeof(readbuf));
if(readed == -1)
{
if(errno != EAGAIN)
{
perror("read()");
handler->close();
delete handler;
errored = true;
}
break;
}
else if (readed == 0)
{
perror("read()");
handler->close();
delete handler;
continue;
errored = true;
break;
}
}
else if (readed == 0)
{
handler->close();
delete handler;
continue;
}
if(errored) continue;
}
if(ev->events & EPOLLOUT && handler->writeable())
{

View File

@ -68,7 +68,8 @@ void NNTPServerHandler::OnData(const char *data, ssize_t l)
}
ArticleObtained();
diff += 5;
Data(end + 5, l - diff);
if(l - diff)
Data(end + 5, l - diff);
return;
}
if (m_article)