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 {
58 const std::function<
void(
int)>& onStatus,
60 std::size_t blockSize,
61 const utils::
Timeval& terminateTimeout)
100 }
else if ((errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) &&
isSuspended()) {
103 onStatus(retWrite == 0 ? 0 : errno);
111 LOG(TRACE) <<
getName() <<
": Shutdown restart";
113 }
else if (
source !=
nullptr) {
136 LOG(WARNING) <<
getName() <<
": Send while not enabled";
139 LOG(WARNING) <<
getName() <<
": Send while shutdown in progress";
144 bool success =
false;
148 success = source !=
nullptr;
151 LOG(TRACE) <<
getName() <<
": Stream started";
153 LOG(WARNING) <<
getName() <<
": Stream source is nullptr";
156 LOG(WARNING) <<
getName() <<
": Stream while not enabled";
159 LOG(WARNING) <<
getName() <<
": Stream while shutdown in progress";
168 LOG(TRACE) <<
getName() <<
": Stream EOF";
178 LOG(TRACE) <<
getName() <<
": Shutdown start";
182 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
virtual bool onSignal(int sigNum)=0
void shutdownWrite(const std::function< void()> &onShutdown)
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)