UDP的发送缓冲区以及SO_SNDBUF问题?

请教各位大大,UDP套接字没有发送缓冲区---《Unix网络编程V1, 2.11.2》 那么UDP套接字设置选项SO_SNDBUF发送缓冲区大小有什么…
关注者
46
被浏览
17,112

2 个回答

在android设备上sk_sndbuf默认值是比较小(24098):

root@cancro:/proc/sys/net/ipv4 # cat udp_mem

18072 24098 36144

udp 发送数据的函数调用链中:

sendmsg - >

1 udp_sendmsg(udp.c)->

2 ip_append_data(ip_output.c)->

3 sock_alloc_send_skb(sock.c)->

4 sock_alloc_send_pskb(sock.c)

使用sk_sndbuf的地方就这个函数(为要发送的数据申请skb),

1875行,如果此socket为发送数据而已经申请的内存 大于sk_sndbuf, 会产生EAGAIN错误(1880行),如果设置了发送超时,会等待重试,否则内核直接返回进程错误信息

lxr.linux.no/linux+v4.1