多路UDP发包时,丢包,请大神帮帮分析下

tangboguosujuan 2017-09-14 02:52:08
在做一个多路并发UDP发包时,发现有丢包现象,经过分析,在发送端cat /proc/net/snmp时,发现SndbufErrors一直在变大;packet大小1400byte,我自己依稀记得udp的SO_SNDBUF好像在协议栈里没有用到,也尝试把rmem_default, rmem_max改大了,都没有什么效果,想问下各位有没有什么办法改进,还有想问下udp的数据包在发送时,到内核中被缓冲到了哪里,这个值怎么能查到,十分感谢
...全文
595 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-04-19
  • 打赏
  • 举报
回复
楼主您好,有一个问题想向您请教一下,感觉与您这个问题描述有些相近。 我现在在做一个发包机程序,之前的功能是一对一单播,现在需要扩展为一对多,但是不能用组播,我的想法是在原来的基础上增加多进程,也就是并发单播,但是出现的状况是,当我进行一对二发包时,始终只有第一路丢包率为0,第二路丢包率达到八十多,纠结很久没有找到问题所在,之后又进行了一项测试,让原来一对一的程序在后台同时运行两个,最终现象与上面所说一对二发包程序的现象一致,均是只有第一路丢包率为0,第二路八十左右。 我得出的结论是,一对一发包程序单独运行没有问题,丢包率为0,说明程序应该是没有问题的,而当该程序并发时,则后运行的丢包率非常高,对于这一现象没有头绪,希望您在闲暇时可以指点一二,十分感谢!
tangboguosujuan 2017-09-16
  • 打赏
  • 举报
回复
用SIOCOUTQ做了测试,缓存区里数据剩余不多;不过根据您的提醒,做了一些延时,情况好很多;我估计是因为某小段时刻有数据集中进入队列,导致峰值很高,出现问题;现在解决办法是每发一定量的数据包后统计耗时,如果小于某个值时,就usleep这个值减去耗时;十分感谢;
jklinux 2017-09-14
  • 打赏
  • 举报
回复
试过用ioctl(socket_fd, SIOCOUTQ, int *value);来获取发送缓冲区中尚未发出的数据大小,如果还有比较数据待发送就延时下再发送数据

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧