SOCKET缓冲区的设置
在使用socket编程时(笔者使用socket完成进程间通信),往往会设置socket缓冲区的大小,偶有心得,分享给大家:
(1)socket可以设置发送缓冲区和接受缓冲区。一般的操作步骤为:创建socket---bind---然后设置大小。socket缓冲区一旦设置,就不能随意更改,直到该socket被关闭。原因为 socket缓冲区是OS映射的一块动态内存,从应用层根本没有办法知道缓冲区的具体地址,也许你会说可以拿着socket的文件描述符去重新设置socket缓冲区大小,但这样显然不合适,因为原来缓冲区中的数据就没有了。
(2)socket的缓冲区设置受两个因素制约,取决于怎么使用。
I:基本说明,在/proc/sys/net/core/目录下有 wmem_default、rmem_default、wmem_max、rmem_max四个配置值。通俗的说就是四个配置项。申请的socket的缓冲区的大小受他们的限制。
II:如果创建socket的时候,没有设置socket缓冲区的大小,那创建的socket缓冲区的最大值受default值的限制,既发送缓冲区为wmem_default;接受缓冲区为rmem_default。如果创建socket的时候,重新设置了socket缓冲区的大小,那此时socket缓冲区的大小就与default没有关系了,设置的socket缓冲区的值,最大不超过max的值。
III:如果default的值比max的值大,会有什么效果?---设置了缓冲区的大小反而没有默认的值大,
IV:拿这些配置项如何修改,很简单,就是文件的操作,先open,然后write,如:write(socketid,"204800\n",sizeof("204800\n"))就OK了。