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问题
【UDP的发送缓冲区以及SO_SNDBUF问题】


    推荐阅读