如何访问tokio::io::BufStream的读缓冲区?
How to access the read buffer of tokio::io::BufStream?
我认识到 tokio::io::BufReader
有一个 buffer()
方法来访问其内部读取缓冲区。但是我找不到 tokio::io::BufStream
这样的接口,也无法使用 public API.[=21= 访问 BufStream
的内部 BufReader
]
我想知道这是设计使然,还是有其他方法可以做到?
顺便说一句,以下是我的用例:
我想为具有特征 AsyncRead + AsyncWrite
的套接字实现流量调度程序。 dispatcher 会尝试 peek 底层 socket 的第一个 read 以确定流量将被路由到哪里,然后 return 一个也支持 AsyncRead + AsyncWrite
的 BufStream
,就好像原来的 socket 是未受影响(不消耗数据)。
我的计划是首先触发对 BufStream
的 fill_buf()
调用,然后查看内部读取缓冲区(我不知道该怎么做)。
我认为这不是固有限制:BufStream
is just BufReader<BufWriter<RW>>
。如果需要,你可以自己做,然后你可以访问缓冲区,但是没有必要: fill_buf()
returns 填充的缓冲区,所以你可以只使用它的返回值。
我认识到 tokio::io::BufReader
有一个 buffer()
方法来访问其内部读取缓冲区。但是我找不到 tokio::io::BufStream
这样的接口,也无法使用 public API.[=21= 访问 BufStream
的内部 BufReader
]
我想知道这是设计使然,还是有其他方法可以做到?
顺便说一句,以下是我的用例:
我想为具有特征 AsyncRead + AsyncWrite
的套接字实现流量调度程序。 dispatcher 会尝试 peek 底层 socket 的第一个 read 以确定流量将被路由到哪里,然后 return 一个也支持 AsyncRead + AsyncWrite
的 BufStream
,就好像原来的 socket 是未受影响(不消耗数据)。
我的计划是首先触发对 BufStream
的 fill_buf()
调用,然后查看内部读取缓冲区(我不知道该怎么做)。
我认为这不是固有限制:BufStream
is just BufReader<BufWriter<RW>>
。如果需要,你可以自己做,然后你可以访问缓冲区,但是没有必要: fill_buf()
returns 填充的缓冲区,所以你可以只使用它的返回值。