Иногда программа должна быть интегрирована со сторонней библиотекой, которая хочет самостоятельно выполнять операции ввода-вывода. Чтобы облегчить это, Буст. Asio включает в себя тип<null_buffers>, который может использоваться как для чтения, так и для записи. Операция<null_buffers>не возвращается, пока объект ввода/вывода не будет «готов» выполнить операцию.
Например, для выполнения неблокирующего чтения можно использовать что-то вроде следующего:
ip::tcp::socket socket(my_io_service);
...
socket.non_blocking(true);
...
socket.async_read_some(null_buffers(), read_handler);
...
void read_handler(boost::system::error_code ec)
{
if (!ec)
{
std::vector<char> buf(socket.available());
socket.read_some(buffer(buf));
}
}
Эти операции поддерживаются как для сокетов на всех платформах, так и для потоково-ориентированных классов дескрипторов POSIX.
null_buffers,basic_socket::non_blocking(),basic_socket::native_non_blocking(),Неблокирующий пример.