UDP的发送缓冲区以及SO_SNDBUF问题
在android设备上sk_sndbuf默认值是比较小(24098):
root@cancro:/proc/sys/net/ipv4 # cat udp_mem
18072\t24098\t36144
udp 发送数据的函数调用链中:
sendmsg - \u0026gt;
1 udp_sendmsg(udp.c)-\u0026gt;
2 ip_append_data(ip_output.c)-\u0026gt;
3 sock_alloc_send_skb(sock.c)-\u0026gt;
4 sock_alloc_send_pskb(sock.c)
使用sk_sndbuf的地方就这个函数(为要发送的数据申请skb),
1875行,如果此socket为发送数据而已经申请的内存 大于sk_sndbuf, 会产生EAGAIN错误(1880行),如果设置了发送超时,会等待重试,否则内核直接返回进程错误信息
http://lxr.linux.no/linux+v4.10.1/net/core/sock.c#L1875
【UDP的发送缓冲区以及SO_SNDBUF问题】
推荐阅读
- tcp通讯时,发送30多个1024的包到客户端,中间有包的大小不对,为啥
- 网络游戏 采用的是tcp协议还是udp协议
- 微信公众号为啥没有预览功能
- 怎样评价脉脉?
- 待后阅读的文章怎样利用ifttt全文发送到evernote
- 注册Facebook,验证手机号码时收到的验证码发送方为啥是中国嘉兴的
- 关于使用PHPMailer发送邮件出错的问题
- Twitter 今天发布了关于 DM 的新策略「一般用户即使不被认证用户关注,也仍可以向他们发送私信」,这个策略变更背后的原因是啥
- 发送文件可否做成二维码扫描样式,对方只要扫描二维码,填写收文人姓名。发送方就可以收到对方的收文反馈
- 移动用户,彩信显示发送中,对方到底收没收到