可以提升::asio::async_read_until检测无尽的流

Can boost::asio::async_read_until detect an endless stream

本文关键字:检测 until 无尽 read async asio      更新时间:2023-10-16

我正在使用boost::asio::async_read_until从套接字读取消息,使用换行符作为分隔符。

例如 boost::asio::async_read_until(socket, buffer, "", .....(

一切都很好,工作正常。

有没有另一种方法来使用此函数或类似的方法,可以检测没有换行符常量的无穷无尽的字符序列。

例如,恶意用户可能会在我的服务器上触发连续的零序列

socat/dev/zero TCP4:localhost:55555

我不可能是历史上第一个遇到这个问题的人

您可以使用 4 个重载中的版本 4:

http://www.boost.org/doc/libs/1_62_0/doc/html/boost_asio/reference/async_read_until/overload4.html

在函数对象(通常是状态机的接口(中,您可以计算字符数、检测非法数据流或任何其他必要的手段。

值得一提的是,如果您的应用程序在恶劣的环境中运行(即面向互联网(,那么您可能希望使用async_read_some来馈送状态机,并且需要一个计时器来捕获和终止占用资源的连接。