c - 如何限制 C 中的套接字速度?

标签 c performance sockets ftp bandwidth-throttling

<分区>

Possible Duplicate:
How do you throttle the bandwidth of a socket connection in C?

我正在用 C 为 Unix 环境编写一个简单的 FTP 服务器。作为服务器的一个特性,我想限制用户的上传/下载速度。

  1. 有没有库函数可以直接解决这个问题?

  2. 如果不是,生产 FTP 服务器中使用的算法是什么?我有一个非常幼稚的解决方案:计算一秒钟要发送多少字节,比如 xwrite(x)read(x) ,然后是 sleep(1)

应该有更好的解决方案。如果有代码示例就更好了。

需要说明的是,我使用的是 Mac OS X,但我希望它也可以在 Ubuntu 或某些 Linux 下运行。

最佳答案

FTP是应用层协议(protocol)。 FTP 可以在 TCP 或 UDP 套接字上运行。 (编辑:tftp 和 uftp 在 udp 上运行,详情请参阅评论部分)

套接字速度是以下函数:

  1. 链路速度:10/100 Base T等。
  2. 链路的 BER:比特误码率(在当今世界,比特误码率通常低于 10 的 -9 次方或类似的东西。也有突发错误。
  3. 套接字缓冲区大小:/proc/sys/net/core 参数

在 linux 上:关于处理 TCP 套接字,这里有一篇很好的文章 [1]

4.调整堆栈以过滤/丢弃数据包以引入数据包丢失,从而最终限制流量:netem[2] 等工具可帮助您调整桶以限制流量。

[1] http://www.cyberciti.biz/faq/linux-tcp-tuning/

[2] http://www.linuxfoundation.org/collaborate/workgroups/networking/netem

关于c - 如何限制 C 中的套接字速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10628472/

相关文章:

c - 声明: "node"?中第一个 "typedef struct node { - - - } Node;"的用途是什么

java - 在 groovy 中创建许多函数会产生多少开销

java - 简单的服务器/套接字程序中不完整的连接

java - Java异步任务/套接字连接问题

c - 无效的读写valgrind

c++ - 代码块未正确显示程序参数

c++ - 在 gcc 编译器中使用 bts 汇编指令

c++ - 我应该传递一个 std::vector 还是固定数量的参数?

c - 发送分段数据报,每个分段均带有 UDP header

c - Ubuntu 20.04 之后可以使用 addr2line 吗?