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)