TCP选项之SO_RCVLOWAT和SO_SNDLOWAT

為{幸葍}努か 提交于 2019-12-10 19:35:25

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

TCP的接收缓冲区和发送缓冲区概念不是很清晰的话,请参考另一篇博文TCP选项之SO_RCVBUF和SO_SNDBUF


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

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!