2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
20#include "core/socket/stream/SocketReader.h"
22#ifndef DOXYGEN_SHOULD_SKIP_THIS
24#include "core/system/socket.h"
31namespace core::socket::
stream {
34 const std::function<
void(
int)>& onStatus,
36 std::size_t blockSize,
37 const utils::
Timeval& terminateTimeout)
45 const std::size_t available =
doRead();
68 retRead = read(readBuffer.data() + size, readLen);
71 size +=
static_cast<std::size_t>(retRead);
77 }
else if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) {
92 readBuffer.resize(readBlockSize);
97 const std::size_t maxReturn = std::min(chunkLen,
size);
99 std::copy(readBuffer.data() + cursor, readBuffer.data() + cursor + maxReturn, chunk);
int getRegisteredFd() const
void setTimeout(const utils::Timeval &timeout)
ReadEventReceiver(const std::string &name, const utils::Timeval &timeout)
void signalEvent(int sigNum) final
SocketReader(const std::string &instanceName, const std::function< void(int)> &onStatus, const utils::Timeval &timeout, std::size_t blockSize, const utils::Timeval &terminateTimeout)
std::size_t readFromPeer(char *chunk, std::size_t chunkLen)
void setBlockSize(std::size_t readBlockSize)
utils::Timeval terminateTimeout
virtual void onReceivedFromPeer(std::size_t available)=0
virtual ssize_t read(char *chunk, std::size_t chunkLen)
Timeval(const Timeval &timeVal) noexcept=default
ssize_t recv(int sockfd, void *buf, std::size_t len, int flags)