本文整理汇总了C++中buffer_t::data方法的典型用法代码示例。如果您正苦于以下问题:C++ buffer_t::data方法的具体用法?C++ buffer_t::data怎么用?C++ buffer_t::data使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类buffer_t
的用法示例。
在下文中一共展示了buffer_t::data方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setAddress
void i2c::write( const buffer_t& data )
{
setAddress();
if( ::write(mDevice, data.data(), data.size()) < 0 )
{
ostringstream os;
os << "unable to write: " << strerror( errno );
throw runtime_error{ move( os.str() ) };
}
}
示例2: read
virtual size_t read(buffer_t& buffer, size_t len) {
auto l = buffer_.read(buffer.data(), len);
if(buffer_.size() < buffer_update*frame_size_) fill_buffer();
return l;
}
示例3: recv_response
void Client_connection::recv_response(buffer_t buf)
{
if (buf->empty()) {
end_response({Error::NO_REPLY});
return;
}
const std::string data{(char*) buf->data(), buf->size()};
// restart timer since we got data
if(timer_.is_running())
timer_.restart(timeout_dur_);
// create response if not exist
if(res_ == nullptr)
{
try {
res_ = make_response(data); // this also parses
}
catch(...)
{
end_response({Error::INVALID});
return;
}
}
// if there already is a response
else
{
// this is the case when Status line is received, but not yet headers.
if(not res_->headers_complete() && req_->method() != HEAD)
{
*res_ << data;
res_->parse();
}
// here we assume all headers has already been received (could not be true?)
else
{
// add chunks of body data
res_->add_chunk(data);
}
}
const auto& header = res_->header();
// TODO: Temporary, not good enough
// if(res_->is_complete())
// Assume we want some headers
if(!header.is_empty())
{
if(header.has_field(header::Content_Length))
{
try
{
const unsigned conlen = std::stoul(std::string(header.value(header::Content_Length)));
const unsigned body_size = res_->body().size();
//printf("<http::Connection> [%s] Data: %u ConLen: %u Body:%u\n",
// req_->uri().to_string().to_string().c_str(), data.size(), conlen, body_size);
// risk buffering forever if no timeout
if(body_size == conlen)
{
end_response();
}
else if(body_size > conlen)
{
end_response({Error::INVALID});
}
}
catch(...)
{ end_response({Error::INVALID}); }
}
else
end_response();
}
else if(req_->method() == HEAD)
{
end_response();
}
}