udp socket接收缓冲区大小

时间:2015-01-27 05:16:36

标签: java sockets networking netty

我使用Netty(一个java网络框架)来服务UDP请求。

我找到了

  

SO_RCVBUF

  

的/ proc / SYS /净/型芯/ rmem_default

  

的/ proc /净/ UDP

输出令人困惑:

通过插座手册(man 7 socket)说明:

  

rmem_default                 包含套接字接收的默认设置(以字节为单位)                 缓冲。

     

rmem_max                 包含最大套接字接收缓冲区大小,以字节为单位                 用户可以使用SO_RCVBUF套接字选项进行设置。

和/ proc / net / udp显示的是udp接收队列大小:

 sl  local_address rem_address   st tx_queue          rx_queue    tr         tm->when   retrnsmt uid     timeout inode                                           
 60: 00000000:2F3C 00000000:0000 07 00000000:0003E094 00:00000000 00000000   500        0        2224362 2       ffff810066908cc0 

我可以获得 SO_RCVBUF = 12904,但 rx_queue 大小为254100(3E094), rmem_default 为262142

我的困惑是,为什么SO_RCVBUF不等于rmem_default,为什么队列大小不等于SO_RCVBUF(但大于它)?

它将ctx.channel().config().getOption(ChannelOption.SO_RCVBUF)的值设为/proc/sys/net/core/rmem_default的一半,而实际的接收缓冲区大小(队列大小)也是/proc/sys/net/core/rmem_default的值

那么为什么ctx.channel().config().getOption(ChannelOption.SO_RCVBUF)不等于系统的配置?

1 个答案:

答案 0 :(得分:-1)

你似乎误读了输出。正确排列列后,rx_queue为零。