可以 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 检测到无穷无尽的流的主要内容,如果未能解决你的问题,请参考以下文章

应用服务器,可以调用脚本,可以操作数据库,可以处理文件,可以远程协同

Java的访问修饰符的作用范围

java中的四种修饰符:privateprotectedpublic和default的区别

为啥我的SSH可以用,而sftp却不可以用

http和https都可以访问可以吗

函数可以调用它本身吗?