如果接收器的 rcvbuf 在 UDP 下已满,如何使套接字 sendto() 块?



所以我正在尝试向服务器发送 100000 个 udp 数据包,每个数据包大约 20 字节。我的服务器需要对每个数据包进行一些处理,所以现在看起来 rcvbuf 只能容纳 ~1000 个数据包,因为服务器接收速度太慢,我想其余的数据包因此而被丢弃。

有没有办法告诉接收方的数据包队列是否已满,以便我可以让我的发送方等待它?

你不能。

根据定义,UDP 是一种不可靠的数据报协议,没有任何流量控制。

如果希望发送方在接收方已满时阻止,请使用 TCP 连接。UDP 是无连接的。发送方没有关于接收方状态的信息。发送方所做的只是发送数据包。UDP 不会提供有关接收方状态的任何反馈。如果你想实现任何类型的流控制,你必须在UDP之上自己设计它。

最新更新