标签: network-programming linux-kernel
我需要编写一个速率限制器,每次传输X字节时都会执行一些操作。 直截了当的是检查每个传输数据包的长度,但我认为这对我来说会很慢。 有没有办法使用某种网络事件,这将由传输的数据包/字节触发?
答案 0 :(得分:1)
我想你可以看一下netfilter。
使用其(内核级别)api,您可以让网络事件触发自定义代码,在将其传递给应用程序之前修改收到的消息,等等。
http://www.netfilter.org/
答案 1 :(得分:0)
实际上它依赖于协议。但是对于TCP,您可以setsockopt SO_RCVLOWAT选项来定义允许读取操作的最小字节数(水印)。 如果您还需要强制执行最大大小,请使用SO_RCVBUF调整接收缓冲区大小。