3

似乎自 boost 1.40.0 以来,async_read_some()调用的工作方式发生了变化。

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

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

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

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

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

4

1 回答 1

1

我使用 boost-1.41 的官方示例进行的快速测试有效......所以我认为它仍然应该有效(如果你使用 null_buffers)

于 2010-01-31T11:05:51.407 回答