Remove the nested read loops in FastCGIConn, hide complexity inside StreamBuffer

This commit is contained in:
Ian Gulliver
2019-04-28 17:50:44 +00:00
parent 323cfc15a5
commit 45e5570959
10 changed files with 73 additions and 51 deletions

26
stream_buffer.cpp Normal file
View File

@@ -0,0 +1,26 @@
#include "stream_buffer.h"
StreamBuffer::StreamBuffer(int sock, size_t size)
: Buffer(size),
sock_(sock) {}
bool StreamBuffer::BufferAtLeast(size_t len) {
CHECK_LE(start_ + len, size_);
while (ReadMaxLen() < len) {
auto read_len = read(sock_, WritePtr(), WriteMaxLen());
PCHECK(read_len >= 0);
if (read_len == 0) {
return false;
}
Wrote(read_len);
}
return true;
}
const char *StreamBuffer::Read(size_t len) {
if (!BufferAtLeast(len)) {
return nullptr;
}
return Buffer::Read(len);
}