在没有回调的情况下增强asio非阻塞IO

时间:2016-02-02 10:30:02

标签: c++ boost boost-asio nonblocking

是否可以使用Boost的asio来执行非阻塞IO 而无需使用异步回调? I.e。相当于O_NONBLOCK套接字选项。

我基本上想要这个功能:

template<typename SyncWriteStream,
         typename ConstBufferSequence>
std::size_t write_nonblock(
    SyncWriteStream & s,
    const ConstBufferSequence & buffers);
  

此函数将尽可能多地写入字节并立即返回。它可能写0个字节。

有可能吗?

2 个答案:

答案 0 :(得分:3)

是的,使用non_blocking()方法将套接字置于Asio非阻塞模式:

key-duplicates

答案 1 :(得分:-1)

使用s.non_blocking(true)的方法不起作用。 如果您检查send实施,则会使用socket_ops::sync_send,如果发送失败则会poll_write

所以它仍然在顶级阻止。