zoukankan      html  css  js  c++  java
  • 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)


  • 相关阅读:
    关于使用CodeFirst,修改类或上下文时操作数据库报错解决方法
    解决:启用多线程调用webBrowsers函数报错:指定的转换无效
    强制IE浏览器或WebBrowser控件使用指定版本显示网页
    EF:分页查询 + 条件查询 + 排序
    (.NET高级课程笔记)委托、事件总结
    windows server 2008 磁盘挂载
    Git的使用
    VLAN原理详解
    Jumpserver的部署和使用
    进程与线程的理解
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7079961.html
Copyright © 2011-2022 走看看