【发布时间】:2014-12-09 07:27:09
【问题描述】:
我想要实现的是通过一个socket以稳定的速度输出数据,比如600KB/s。因为TCP有自己的流控,所以我选择UDP。
问题来了:如何做到这一点?我可以每分钟发送一个 600KB 大小的数据包吗?以及如何控制两个数据包之间的时间间隔?我可以用select()设置一个时间间隔吗:
select(fd, NULL, NULL, NULL, &tv); //tv is set as 1 second
我对此表示怀疑,因为套接字的sendto()是在应用层运行的,我们无法确保数据包已经被操作系统内核发送出去。
如何解决这个问题?还是有更好的办法?
PS:C语言
【问题讨论】:
-
您建议的 600KB 消息将被操作系统分解为 600 多个数据包。此外,如果“流量控制”是指“速率”,那么 TCP 没有流量控制...... TCP 保证 1)对数据包内容的错误检查 2)数据包以正确的顺序传递给对等方 3)丢失数据包的重传.使用 UDP,您将一无所获。如果这些问题对您很重要,那么您将不得不使用 TCP,或者将它们构建到您的应用程序中(即也称为重新发明轮子)。
标签: c linux sockets udp throughput