可以 boost::asio::async_read_until 检测到无穷无尽的流
Posted
技术标签:
【中文标题】可以 boost::asio::async_read_until 检测到无穷无尽的流【英文标题】:Can boost::asio::async_read_until detect an endless stream 【发布时间】:2017-03-22 16:48:49 【问题描述】:我正在使用 boost::asio::async_read_until 从套接字读取消息,使用换行符作为分隔符。
例如boost::asio::async_read_until(socket, buffer, "\n", .....)
一切都很好,工作正常。
有没有其他方法可以使用这个函数,或者类似的方法,可以检测无穷无尽的没有换行符的字符序列。
例如恶意用户可能会在我的服务器上触发连续的零序列
socat /dev/zero TCP4:localhost:55555
我不可能是历史上第一个遇到这个问题的人
【问题讨论】:
***.com/questions/32273929/…的可能重复 不是我想要的。 那你在找什么?endless
是主观的。您可以使用实用的用例上限选择自己实施这样的限制。
感谢您的回复以及其他回复。我似乎在这里打开了一罐蠕虫。我们确实有一个面向互联网的应用程序,所以我们需要考虑使用 async_read_some 和某种函数对象。同时,我将使用固定大小的缓冲区并假设缓冲区溢出是无效消息
【参考方案1】:
您可以使用 4 个重载中的第 4 个版本:
http://www.boost.org/doc/libs/1_62_0/doc/html/boost_asio/reference/async_read_until/overload4.html
在您的函数对象(通常是状态机的接口)中,您可以计算字符数、检测非法数据流或任何其他必要的手段。
可能值得一提的是,如果您的应用程序在敌对环境中运行(即面向互联网),那么您可能希望使用 async_read_some
来提供您的状态机,并需要一个计时器来捕获和终止当前的连接并消耗资源。
【讨论】:
感谢您的回复以及其他回复。我似乎在这里打开了一罐蠕虫。我们确实有一个面向互联网的应用程序,所以我们需要考虑使用 async_read_some 和某种函数对象。同时,我将使用固定大小的缓冲区,并假设缓冲区溢出是无效消息。 @PMcK 互联网上的蠕虫病毒最多... :)以上是关于可以 boost::asio::async_read_until 检测到无穷无尽的流的主要内容,如果未能解决你的问题,请参考以下文章
应用服务器,可以调用脚本,可以操作数据库,可以处理文件,可以远程协同