我有一台计算机,通过UDP与摄像头通信,连接物理电缆(没有路由器或交换机)。我的Java软件等待从未接收到的图像行,我相信这可能是由于接收缓冲区溢出造成的。我试图在/etc/sysctl.conf中增加接收缓冲区的最大大小:当我试图询问操作系统的最小、默认和最大大小时:net.ipv4.udp mem 185535 2477
似乎没有显式的"drop udp buffer“系统调用,但也许我错了?
下一个最好的方法可能是将数据包recv到一个临时缓冲区,然后丢弃它。似乎我不能接收0字节,因为人们说的是recv:The return value will be 0 when the peer has performed an orderly shutdown.这个服务器所做的唯一一件事就是以一种特定的方式转发/分派UDP数据包--尽管带有len=1的recv不会杀死我,但我宁愿使用一些更具体的功能来一次性丢弃整个队列(希望降低
this,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));
其目的基本上是在每次处理UDP两台主机(发送方和接收方,运行Ubuntu 10.04 LTS)都可以使用资源-我没有看到CPU、内存或网络饱和。netstat -su的输出如下所示- 38569571 packets received
1003583 packets to unknown port received.