2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "core/socket/stream/SocketWriter.h"
44#include "core/pipe/Source.h"
46#ifndef DOXYGEN_SHOULD_SKIP_THIS
48#include "core/system/socket.h"
49#include "log/Logger.h"
55namespace core::socket::
stream {
57 const std::function<
void(
int)>& onStatus,
59 std::size_t blockSize,
60 const utils::
Timeval& terminateTimeout)
97 totalSent +=
static_cast<std::size_t>(retWrite);
108 }
else if ((errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) &&
isSuspended()) {
111 onStatus(retWrite == 0 ? 0 : errno);
119 LOG(TRACE) <<
getName() <<
": Shutdown restart";
121 }
else if (
source !=
nullptr) {
145 LOG(WARNING) <<
getName() <<
": Send while not enabled";
148 LOG(WARNING) <<
getName() <<
": Send while shutdown in progress";
153 bool success =
false;
157 success = source !=
nullptr;
160 LOG(TRACE) <<
getName() <<
": Stream started";
162 LOG(WARNING) <<
getName() <<
": Stream source is nullptr";
165 LOG(WARNING) <<
getName() <<
": Stream while not enabled";
168 LOG(WARNING) <<
getName() <<
": Stream while shutdown in progress";
177 LOG(TRACE) <<
getName() <<
": Stream EOF";
187 LOG(TRACE) <<
getName() <<
": Shutdown start";
191 LOG(TRACE) <<
getName() <<
": Shutdown delayed due to queued data";
int getRegisteredFd() const
const std::string & getName() const
WriteEventReceiver(const std::string &name, const utils::Timeval &timeout)
virtual void doWriteShutdown(const std::function< void()> &onShutdown)=0
utils::Timeval terminateTimeout
std::function< void(int)> onStatus
void setBlockSize(std::size_t writeBlockSize)
void sendToPeer(const char *chunk, std::size_t chunkLen)
core::pipe::Source * source
std::vector< char > writePuffer
void signalEvent(int sigNum) final
std::function< void()> onShutdown
std::size_t getTotalSent() const
virtual bool onSignal(int sigNum)=0
void shutdownWrite(const std::function< void()> &onShutdown)
std::size_t getTotalQueued() const
bool streamToPeer(core::pipe::Source *source)
virtual ssize_t write(const char *chunk, std::size_t chunkLen)
SocketWriter(const std::string &instanceName, const std::function< void(int)> &onStatus, const utils::Timeval &timeout, std::size_t blockSize, const utils::Timeval &terminateTimeout)
Timeval(const Timeval &timeVal) noexcept=default
ssize_t send(int sockfd, const void *buf, std::size_t len, int flags)