当有一些数据要在boost.asio流上读取而不将其读入缓冲区时,如何获得回调?

时间:2010-01-12 13:57:03

标签: sockets networking boost asynchronous boost-asio

似乎自从1.40.0提升后,async_read_some()调用的工作方式发生了变化。

以前,您可以传入null_buffer,当有数据要读取时,您会收到回调,但没有框架将数据读入任何缓冲区(因为没有一个!)。这基本上允许你编写类似于select()调用的代码,当你的套接字上有一些数据时,你会被告知。

在新代码中,行为已更改为按以下方式工作:

  

如果序列mb中所有缓冲区的总大小为0,则异步读取操作应立即完成,并将0作为参数传递给处理程序,指定读取的字节数。

这意味着我的旧(以及顺便提一下,this official example中显示的方法)检测套接字上的数据的方式不再有效。对我来说问题是我需要一种方法来检测这个,因为我已经在asio套接字流的顶部分层我自己的流类,因此,我不能只读取我的流将期望在那里的套接字上的数据。我现在能想到的唯一解决方法是读取单个字节,存储它,然后当我的流类请求一些字节时,如果设置了一个字节则返回该字节:不漂亮。

有没有人知道在最新的boost.asio代码下实现这种行为的更好方法?

1 个答案:

答案 0 :(得分:1)

我使用boost-1.41的官方示例快速测试......所以我认为它仍然可以工作(如果你使用null_buffers)