2010-01-12 57 views
3

看来,自1.40.0上调以来,async_read_some()调用的方式发生了变化。你可以传入一个null_buffer,当有数据需要读取时,你会得到一个回调,但没有框架读取数据到任何缓冲区(因为没有一个!)。这基本上允许你编写代码,它的行为就像一个select()的调用,在那里你会被告知你的套接字什么时候有一些数据。如何在不读取缓冲区的情况下读取boost.asio流中的某些数据时获取回调?

在新代码的行为已更改以下列方式工作:

如果所有缓冲区中的顺序MB总大小为0,异步读取操作将立即完成并通过0作为处理程序的参数,指定读取的字节数。

这意味着我的旧的(并且顺便说一下,在​​中显示的方法)在套接字上检测数据的方式不再有效。对我而言,问题在于我需要一种检测这种方式的方式,因为我已将自己的流类分层放置在asio套接字流的顶层,因此,我不能只从我的流期望的套接字中读取数据。我现在唯一能想到的解决方法是读取一个字节,存储它,当我的流类请求一些字节时,如果设置了一个字节,则返回该字节:不是很漂亮。

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

+0

你确定是这种情况? 因为否则它显然是一个错误,应该向ASIO维护者报告,因为 null_buffer的孔目的是为了支持“Select like/Reactor”操作。 – Artyom 2010-01-31 10:26:16

回答

1

我的快速测试与升压1.41作品的官方例子。所以我认为还是应该工作(如果你使用null_buffers)

相关问题