GNU Linux中的SO_RCVLOWAT和SO_SNDLOWAT说明
2015-07-12 20:43
351 查看
/********************************************************************* * 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)
相关文章推荐
- linux命令
- linux用户管理,运行级别
- 在 Linux 中热添加内存(Suse11)
- linux下线程的创建,转帖
- linux文件目录
- linux命令
- linux命令及开发java
- linux下几种目标文件的分析
- linux使用技巧
- linux 配置 android studio
- LINUX进程间通信:PIPE与FIFO
- Linux集群基础
- git 学习笔记2-linux上安装git
- linux 共享内存
- Linux struct itimerval用法
- Linux高级文件系统管理之基本RAID的工作原理
- CentOS搭建LAMP服务器环境硬盘分区方案分享
- Android使用Linux mount获取SdCard存储目录
- navicate连接Linux下mysql慢,卡,以及mysql相关查询,授权
- Linux下套接字详解(三)----几种套接字I/O模型