【发布时间】:2016-02-02 10:30:01
【问题描述】:
是否可以在不使用异步回调的情况下使用 Boost 的 asio 进行非阻塞 IO ? 即相当于O_NONBLOCK 套接字选项。
我基本上想要这个功能:
template<typename SyncWriteStream,
typename ConstBufferSequence>
std::size_t write_nonblock(
SyncWriteStream & s,
const ConstBufferSequence & buffers);
此函数将写入尽可能多的字节并立即返回。它可能会写入 0 个字节。
有可能吗?
【问题讨论】:
-
如果立即返回,它如何“返回”写入的字节数?您如何判断数据是否已发送?如果有错误?没有某种回调是不可能的。
-
它会将它们写入内部缓冲区。看看
O_NONBLOCK。 -
我知道非阻塞套接字,我想知道如果您不想使用回调,您将如何告诉程序
write调用成功或失败。你怎么会知道write函数何时在没有某种轮询的情况下完成?你会在主程序中这样做吗?轮询一些状态缓冲区?异步编程不仅仅是“调用非阻塞函数,然后继续我的快乐方式”那么简单。 -
以后的调用会失败。很简单。
标签: c++ boost boost-asio nonblocking