diff --git a/src/server.cpp b/src/server.cpp index 85ee26a..ce22503 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -422,8 +422,8 @@ void Server::stop() { void Server::addDescriptor(int fd, std::function cb) { auto event = this->ioContext.lowLevelProvider->wrapInputFd(fd, kj::LowLevelAsyncIoProvider::TAKE_OWNERSHIP); - std::vector buffer(PROC_IO_BUFSIZE); - tasks.add(handleFdRead(event, kj::mv(buffer), cb).attach(std::move(event))); + auto buffer = kj::heapArrayBuilder(PROC_IO_BUFSIZE); + tasks.add(handleFdRead(event, buffer.asPtr().begin(), cb).attach(std::move(event)).attach(std::move(buffer))); } void Server::acceptHttpClient(kj::Own&& listener) { @@ -456,12 +456,12 @@ void Server::acceptRpcClient(kj::Own&& listener) { // returns a promise which will read a chunk of data from the file descriptor // wrapped by stream and invoke the provided callback with the read data. // Repeats until ::read returns <= 0 -kj::Promise Server::handleFdRead(kj::AsyncInputStream* stream, std::vector&& buffer, std::function cb) { - return stream->tryRead((void*)buffer.data(), 1, PROC_IO_BUFSIZE).then(kj::mvCapture(kj::mv(buffer), [this,stream,cb](std::vector&& buffer, size_t sz) { +kj::Promise Server::handleFdRead(kj::AsyncInputStream* stream, char* buffer, std::function cb) { + return stream->tryRead(buffer, 1, PROC_IO_BUFSIZE).then([this,stream,buffer,cb](size_t sz) { if(sz > 0) { - cb(buffer.data(), sz); + cb(buffer, sz); return handleFdRead(stream, kj::mv(buffer), cb); } return kj::Promise(kj::READY_NOW); - })); + }); } diff --git a/src/server.h b/src/server.h index 765c372..fab68f9 100644 --- a/src/server.h +++ b/src/server.h @@ -23,7 +23,6 @@ #include #include #include -#include struct LaminarInterface; @@ -47,7 +46,7 @@ public: private: void acceptHttpClient(kj::Own&& listener); void acceptRpcClient(kj::Own&& listener); - kj::Promise handleFdRead(kj::AsyncInputStream* stream, std::vector&& buffer, std::function cb); + kj::Promise handleFdRead(kj::AsyncInputStream* stream, char* buffer, std::function cb); void taskFailed(kj::Exception&& exception) override { kj::throwFatalException(kj::mv(exception));