5 #include "boost/asio/detail/recycling_allocator.hpp"
14 using boost::asio::buffer;
15 using boost::asio::buffer_cast;
16 using boost::asio::mutable_buffer;
17 using boost::system::error_code;
26 size_t buffer_send_size) :
27 offset_(0), last_write_(0), buffer_send_size_(buffer_send_size),
46 boost::asio::detail::recycling_allocator<void> allocator;
75 size_t remaining = buffer_size(head) -
offset_;
82 const uint8_t *data = buffer_cast<
const uint8_t *>(head) +
offset_;
91 bool more_write =
true;
96 if ((
offset_ + wrote) == buffer_size(head)) {
109 session_->
server_->stats_.write_blocked_duration_usecs += blocked_usecs;
123 uint8_t *data =
new uint8_t[bytes];
124 memcpy(data, src, bytes);
125 mutable_buffer buffer = mutable_buffer(data, bytes);
130 const uint8_t *data = buffer_cast<
const uint8_t *>(buffer);
bool UpdateBufferQueue(size_t wrote, bool *send_ready)
tbb::atomic< uint64_t > write_block_start_time
void AsyncWriteInternal(TcpSessionPtr session)
tbb::atomic< uint64_t > write_blocked
boost::scoped_ptr< Strand > io_strand_
void BufferAppend(const uint8_t *data, int len)
boost::intrusive_ptr< TcpSession > TcpSessionPtr
tbb::atomic< uint64_t > write_calls
tbb::atomic< uint64_t > write_blocked_duration_usecs
virtual void AsyncWrite(const uint8_t *data, std::size_t size)
void DeleteBuffer(boost::asio::mutable_buffer buffer)
BufferQueue buffer_queue_
static const int kMaxPendingBufferSize
TcpMessageWriter(TcpSession *session, size_t buffer_send_size)
static uint64_t UTCTimestampUsec()
size_t GetBufferQueueSize() const
int AsyncSend(const uint8_t *msg, size_t len, boost::system::error_code *ec)
static const int kDefaultWriteBufferSize
tbb::atomic< bool > write_blocked_
static const int kMinPendingBufferSize