correct buffering
This commit is contained in:
parent
0c41298fe0
commit
b227bf6ff1
@ -47,7 +47,7 @@ public:
|
||||
private:
|
||||
size_t conns;
|
||||
int epollfd;
|
||||
char readbuf[2048];
|
||||
char readbuf[128];
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -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())
|
||||
{
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user