GNU Linux中的SO_RCVLOWAT和SO_SNDLOWAT说明

/*********************************************************************
 * Author  : Samson
 * Date    : 07/12/2015
 * Test platform:
 *              gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
 *              GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu)
 * Nginx version:
 *              Nginx 1.6.2
 *              Nginx 1.8.0
 * *******************************************************************/

SO_RCVLOWAT SO_SNDLOWAT

每个套接口都有一个接收低潮限度和一个发送低潮限度。

接收低潮限度:对于TCP套接口而言,接收缓冲区中的数据必须达到规定数量,内核才通知进程“可读”。比如触发select或者epoll,返回“套接口可读”。

发送低潮限度:对于TCP套接口而言,和接收低潮限度一个道理。

理解接收低潮限度:如果应用程序没有调用recv()去读取socket的接受缓冲区的数据,则接受缓冲区数据将注一直保存在接受缓冲区中,所以随着接受缓冲区接受到更多发送端发送缓冲区中的数据,则肯定会导致接受缓冲区溢出,所以设置一个接受低潮限度,当epoll监听到某一个socket的接受缓冲区的数据超过了接受低潮限度,则触发读就绪,使得epoll循环返回,开始处理读I/O事件。

接收低潮限度:默认为1字节

理解发送低潮限度:如果应用程序没有调用send()来copy应用程序buff中的数据到socket发送缓冲区中,则随着发送缓冲区的数据被内核通过tcp协议发送出去,最后socket发送缓冲区的数据越来越少,可用的剩余空间越来越多,最后超过发送缓冲区的发送低潮限度,则epoll监听到这个socket可写,使得epoll循环返回,开始处理写I/O事件。

发送低潮限度:默认为2048字节

Nginx中对应的设置:

ngx_send_lowat设置

GNU Linux提供的setsockopt进行设置,在Nginx中的src/event/ngx_event.c代码中的ngx_send_lowat函数中进行了发送低潮限度: setsockopt(c->fd, SOL_SOCKET, SO_SNDLOWAT, (const void *) &sndlowat, sizeof(int)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 08:15:59

GNU Linux中的SO_RCVLOWAT和SO_SNDLOWAT说明的相关文章

在GNU Linux中如何得到一个进程当前的流量

/*********************************************************************  * Author  : Samson  * Date    : 11/19/2014  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************

在GNU Linux中怎样得到一个进程当前的流量

/*********************************************************************  * Author  : Samson  * Date    : 11/19/2014  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************

Gnu Linux下文件的字符编码及转换工具

/*********************************************************************  * Author  : Samson  * Date    : 07/03/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

如何在 Debian GNU/Linux 添加修改软件源

- 转载请注明出处 http://www.zzzke.cn/ 或超链接至本文 -- 我们在 Debian GNU/Linux 中有时软件源的网络速度慢,在使用 apt 安装源中的软件时总是因源服务器负荷大而时间很长,所以想换个软件源或添加软件源又不知道怎么做,现在就给您讲一下 Debian GNU/Linux 中软件源的修改方法.步骤很简单,只要修改在 /etc/apt/sources.list 文件中的软件源地址就可以了,但要记得这个文件不是谁都能修改的,要有系统管理员权限才行. 首先要以 系

一步步搭建物联网系统——GNU/Linux 强大且Free

GNU/Linux 强大且Free 什么是Linux Linux是一种自由和开放源码的类UNIX操作系统内核.目前存在着许多不同的Linux发行版,可安装在各种各样的电脑硬件设备,从手机.平 板电脑.路由器和影音游戏控制台,到桌上型电脑,大型电脑和超级电脑.Linux是一个领先的操作系统内核,世界上运算最快的10台超级电脑运行的都是基 于Linux内核的操作系统. Linux操作系统也是自由软件和开放源代码发展中最著名的例子.只要遵循GNU通用公共许可证,任何人和机构都可以自由地使用Linux的

linux中的重定向和管道的使用方法

一个程序运行就必须要有指令和数据或者说数据结构和算法.程序处理的数据来源和处理后存放在哪,是程序员必须要考虑额问题.每个程序都有读入数据和输出数据的需求,但是为了便捷,程序允许缺省输入和输出,也就是使用默认的输入输出.一般称之为标准输入和标准输出. 对于用户来说,访问文件是通过文件名来进行的,但对于内核来说则是一个非零整数,这个数字叫做文件描述符(file descriptor,fd),打开已存在的文件或新建一个文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来指定带读写的文件.

俄罗斯军方的 GNU/Linux 发行版:Astra Linux

俄罗斯陆军以及情报部门对于信息基础架构安全防护的需求,由 RusBitTech 基于 Debian GNU/Linux 开发了 Astra Linux. Astra Linux 宣称其许可证既符合俄罗斯的法律也不违反 GPL 自由软件许可证.这里可以找到 Astra Linux 的源代码.从 1.1 的特性可以看出:除了像 Firefox, LibreOffice 等常见应用外,Astra 中集成了曾经备受关注的俄罗斯的国家密码算法 GOST 和基于 Linux 4.2 内核的高度定制版本,从源

GNU/Linux复习笔记(1)

第一次接触GNU/Linux还是大四上学期实习的那两个月在window里装了 个虚拟机玩红帽的系统,那段时间稍微学了一点命令就不玩了.后来大四下学期认识了王总,装了双系统,那段时间又对linux有了进一步认识并产生了很大的 兴趣.直到上学期突然发疯把笔记本装debian8以后才完全进入linux的世界.学习真的是一个螺旋式上升的过程.下面进入正题: ---Linux的基本原则: 1.由目的单一的小程序组成,组合小程序完成复杂任务(KISS:keep it simple,stupid)2.一切皆文

在GNU/Linux下使用Lilypond排版简谱

尽管GNU/Linux并非无所不能,但确实能在很多时候提供免费.开放的解决方案.这两天我想做一个简谱,在网上搜索乐谱排版软件,发现了基于GPL协议的Lilypond软件.只不过Lilypond是用来做五线谱的.幸好,又找到剑桥大学 Silas S. Brown 编写的一个 jianpu-ly.py 脚本,通过调用Lilypond能够最终生成简谱.关于它的详细介绍请看这里. 该脚本支持的简谱语法规则如下: 音阶:1 2 3 4 5 6 7 1' 空拍:0 升.降音:#1 b2 低两个八度.低八度.