can*_*an. 5 c sockets ftp performance bandwidth-throttling
可能重复:
如何限制C中套接字连接的带宽?
我正在用C语言为Unix环境编写一个简单的FTP服务器.作为服务器的一项功能,我想限制用户的上传/下载速度.
有没有任何库函数直接解决这个问题?
如果没有,生产FTP服务器中使用的算法是什么?我有一个非常天真的解决方案:计算一秒钟发送多少字节,比如说x,write(x)或者read(x)然后sleep(1).
应该有一个更好的解决方案.如果有代码示例则更好.
为了清楚起见,我使用的是Mac OS X,但我希望它也可以在Ubuntu或某些Linux下运行.
use*_*140 -1
你确定你要这么做吗?您的动机是惹恼用户吗?(这是一个合法的动机 - 请参阅几个“免费上传”网站中的任何一个)
像这样的带宽限制并不是保护服务器过载的好方法。人们会找到线程客户端并打开并发 FTP 会话......
有没有库函数可以做到这一点?
可能不是,带宽调整是操作系统任务而不是服务任务。
算法是什么?
你所描述的那个听起来相当有效。
为了使它更好,可以看看在决定睡觉之前已经读取或写入了多少个八位字节以及花费了多少时间。考虑客户端比您的限制慢的情况:读取和写入将最终阻塞,并且您的 sleep() 只会增加不必要的延迟。这也将减少用户对磁盘延迟等的隐藏影响。
您可以考虑使用 usleep 或 nanosleep 来获得更精细的分辨率,两者都在 posix 中,因此应该在 OSX *BSD 和 linux 上。