-1

以下问题适用于winsockTCP 套接字连接。

有没有办法丢弃任何已经发送但排队的内部winsock缓冲区,这样如果线路质量再次变得更好(即嘈杂的WLAN连接),它就不会被发送。发送数据的原因是发送旧的视频直播流帧没有意义,应该丢弃所有旧帧,以便只发送最新的帧。

如果 SO_SNDBUF 设置为零,缓冲区会被丢弃吗?

编辑:我知道 UDP 在这里可能是更好的选择,但有一些理由反对使用 UDP:

  • 组装数据包
  • 数据包排序
  • 设计决策

特别是排序需要在应用程序端进行额外的缓冲。丢弃帧数小于已处理的任何数据包的方法可能是一种选择,但这可能导致大量帧将被丢弃的情况。

4

2 回答 2

0

No, once you've handed the data down to the operating system, it owns it and will make its best effort in delivering it to the other end. You can't change or remove that data.

What you possibly can do is lower the send buffer size, such that the operating system doesn't queue as much data - and rather queue the data yourself in your application. You control the queue in the application, and can discard that data. Some fine tuning is needed, as a too low send buffer can lower the throughput.

于 2013-09-17T07:17:55.050 回答
0

并非没有进入内核空间。你甚至会如何解决它?在这一点上,来自所有流程的数据混合在一起,所以很难说什么要发送,什么不应该发送。即使存在某种 API,您的进程至少必须有权执行此类操作。

另外,你为什么要发送视频 TCP?如果您担心性能(例如在处理旧帧时不会陷入困境),UDP 可能是更好的选择。

于 2013-09-17T07:14:10.097 回答