Asio基本接口

Asio是C++的網絡庫,有boost和非boost這兩種版本,這裏涉及的都是非boost的版本。Asio官方文檔html

在使用Asio時能夠只包含頭文件asio.hpp,若是知道所用接口具體在哪一個頭文件中定義,也能夠直接包含該頭文件。c++

buffer

頭文件asio/buffer.hpp網絡

asio::buffer的接口不少,下面這些都是:async

mutable_buffers_1 buffer(const mutable_buffer & b);
mutable_buffers_1 buffer(const mutable_buffer & b, std::size_t max_size_in_bytes);
const_buffers_1 buffer(const const_buffer & b);
const_buffers_1 buffer(const const_buffer & b, std::size_t max_size_in_bytes);
mutable_buffers_1 buffer(void * data, std::size_t size_in_bytes);
const_buffers_1 buffer(const void * data, std::size_t size_in_bytes);
// 模板
template< typename PodType, std::size_t N> 
mutable_buffers_1 buffer( PodType (&data)[N]);

template<typename PodType, std::size_t N>
mutable_buffers_1 buffer(PodType (&data)[N], std::size_t max_size_in_bytes);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(const PodType (&data)[N]);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(const PodType (&data)[N], std::size_t max_size_in_bytes);

template<typename PodType, std::size_t N>
mutable_buffers_1 buffer(boost::array< PodType, N > & data);

template<typename PodType, std::size_t N>
mutable_buffers_1 buffer(boost::array< PodType, N > & data, std::size_t max_size_in_bytes);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(boost::array< const PodType, N > & data);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(boost::array< const PodType, N > & data, std::size_t max_size_in_bytes);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(const boost::array< PodType, N > & data);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(const boost::array< PodType, N > & data, std::size_t max_size_in_bytes);

template<typename PodType, std::size_t N>
mutable_buffers_1 buffer(std::array< PodType, N > & data);

template<typename PodType, std::size_t N>
mutable_buffers_1 buffer(std::array< PodType, N > & data, std::size_t max_size_in_bytes);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(std::array< const PodType, N > & data);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(std::array< const PodType, N > & data, std::size_t max_size_in_bytes);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(const std::array< PodType, N > & data);

template<typename PodType, std::size_t N>
const_buffers_1 buffer(const std::array< PodType, N > & data, std::size_t max_size_in_bytes);

template<typename PodType, typename Allocator>
mutable_buffers_1 buffer(std::vector< PodType, Allocator > & data);

template<typename PodType, typename Allocator>
mutable_buffers_1 buffer(std::vector< PodType, Allocator > & data, std::size_t max_size_in_bytes);

template<typename PodType, typename Allocator>
const_buffers_1 buffer(const std::vector< PodType, Allocator > & data);

template<typename PodType, typename Allocator>
const_buffers_1 buffer(const std::vector< PodType, Allocator > & data, std::size_t max_size_in_bytes);

template<typename Elem, typename Traits, typename Allocator>
const_buffers_1 buffer(const std::basic_string< Elem, Traits, Allocator > & data);

template<typename Elem, typename Traits, typename Allocator>
const_buffers_1 buffer(const std::basic_string< Elem, Traits, Allocator > & data, std::size_t max_size_in_bytes);

通常經常使用的是這幾個:spa

mutable_buffers_1 buffer(void * data, std::size_t size_in_bytes);

通常用帶有指定大小的比較方便,這樣能夠重複利用buffer,不須要去整一個剛好大小的buffer。code

官方的例子:htm

char d1[128];
size_t bytes_transferred = sock.receive(asio::buffer(d1));

std::vector<char> d2(128);
bytes_transferred = sock.receive(asio::buffer(d2));

std::array<char, 128> d3;
bytes_transferred = sock.receive(asio::buffer(d3));

boost::array<char, 128> d4;
bytes_transferred = sock.receive(asio::buffer(d4));

注意,若是用的是STL容器,如vector,雖然它是能夠動態調整大小的,可是buffer不會去調整它,因此傳進去的vector的size決定了這個buffer所能容納的數據量,而不是capacity決定的。buffer的其餘接口還有buffer_size獲取大小、buffer_cast類型轉換、buffer_copy拷貝,這裏不談了。接口

write

寫的接口比較少,只有以下四個:ci

template<typename AsyncWriteStream, typename ConstBufferSequence, typename WriteHandler>
void-or-deduced async_write(AsyncWriteStream & s, const ConstBufferSequence & buffers, WriteHandler handler);

template<typename AsyncWriteStream, typename ConstBufferSequence, typename CompletionCondition, typename WriteHandler>
void-or-deduced async_write(AsyncWriteStream & s, const ConstBufferSequence & buffers, CompletionCondition completion_condition, WriteHandler handler);

template<typename AsyncWriteStream, typename Allocator, typename WriteHandler>
void-or-deduced async_write(AsyncWriteStream & s, basic_streambuf< Allocator > & b, WriteHandler handler);

template<typename AsyncWriteStream, typename Allocator, typename CompletionCondition, typename WriteHandler>
void-or-deduced async_write(AsyncWriteStream & s, basic_streambuf< Allocator > & b, CompletionCondition completion_condition, WriteHandler handler);

通常能夠這樣用:文檔

char data[size] = ...;
asio::async_write(sock, asio::buffer(data, size), handler);
相關文章
相關標籤/搜索