/* */ #include "SocketBuffer.h" #include #include "SocketCore.h" #include "DlAbortEx.h" #include "message.h" #include "StringFormat.h" namespace aria2 { SocketBuffer::SocketBuffer(const SharedHandle& socket): _socket(socket) {} SocketBuffer::~SocketBuffer() {} void SocketBuffer::feedSendBuffer(const std::string& data) { _sendbuf += data; } ssize_t SocketBuffer::feedAndSend(const std::string& data) { feedSendBuffer(data); return send(); } ssize_t SocketBuffer::send() { if(_sendbuf.empty()) { return 0; } ssize_t len = _socket->writeData(_sendbuf.c_str(), _sendbuf.size()); if(len == 0 && !_socket->wantRead() && !_socket->wantWrite()) { throw DL_ABORT_EX(StringFormat(EX_SOCKET_SEND, "Connection closed.").str()); } _sendbuf.erase(0, len); return len; } bool SocketBuffer::sendBufferIsEmpty() const { return _sendbuf.empty(); } } // namespace aria2