linux通信中recv,linux套接字通信之recv中的缓存机制的研究
以前一直有这么一个小小的疑惑,当一个进程注册一个套接字后,如果这个套接字没有被调用recv函数接受数据包,那么这个套接字能接受到数据包吗? 或者这样说,如果我的程序注册了一个套接字去接受数据包,但是每收到一个数据包都需要很长一段时间处理,并且在处理数据包的途中recv函数使没有被调用的,那么如果程序再处理数据包的途中有数据包到来,那我的程序会不会漏过这些数据包(那个包到达的时候程序在处理别的包,而没有调用recv函数)?
答案是不会的。事实上linux中会为每个套接字建立缓存,当属于套接字的包到达的时候,只要这个套接字已经被注册,不管你当时有没有调用recv函数,数据包都会被存在套接字的缓存中(实际上是一个skb结构链表),只要缓存没被填满,你可以随时调用recv函数从缓存中取出数据包处理。本人经过实验发现,数据包在缓存中停放的时间是很长的,个人推测应该是直到这个套接字被关闭。
说到这里的缓存,研究过tcpip的人一定能想到tcp中的滑动窗口流量控制。没错,那里的窗口大小值其实就是你的套接字当前的剩余缓存大小值。默认下套接字的初始缓存大小为8192字节,当然,这个也是可以用套接字选项去调整的。所以,只要一个套接字被注册,那么当数据包到来后该数据包会首先被内核的协议栈处理,此时即使你的程序没有处理这个数据包,这个数据包也会保存在内核的缓存中。
原文:http://blog.csdn.net/l1902090/article/details/37741083
linux通信中recv,linux套接字通信之recv中的缓存机制的研究相关推荐
- linux 服务器间通信,Linux 下的进程间通信:套接字和信号 | Linux 中国
原标题:Linux 下的进程间通信:套接字和信号 | Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的. -- Marty Kalin 本篇是 Linux 下(IPC)系列的第三 ...
- Linux本地套接字通信
1. 本地套接字 socket API原本为网络通信而设计,后来在其基础上扩展出本地套接字机制用于本地进程间通信. 本地套接字为全双工通信方式. 2. 本地套接字的使用 2.1 本地套接字通信步骤 ( ...
- 【Linux网络编程】UDP 套接字编程
[Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...
- Linux网络编程——Unix本地套接字
概述 今天给大家讲解网络编程中的一个内容--Unix 本地套接字. 发现很多人不知道或者不太了解 Unix 本地套接字这个概念,这也难怪,socket API 原本就是为多台主机之间网络通信设计的,并 ...
- 【Linux网络编程】原始套接字实例:MAC 地址扫描器
如果 A (192.168.1.1 )向 B (192.168.1.2 )发送一个数据包,那么需要的条件有 ip.port.使用的协议(TCP/UDP)之外还需要 MAC 地址,因为在以太网数据包中 ...
- TCP/IP网络编程---Linux系统下的TCP套接字编程
目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据 ...
- Linux网络编程:原始套接字的魔力【续】
如何从链路层直接发送数据帧 本来以为这部分都弄完了,结果有朋友反映说看了半天还是没看到如何从链路层直接发送数据.因为上一篇里面提到的是从链路层"收发"数据,结果只&q ...
- 【Linux网络编程】原始套接字实例:发送 UDP 数据包
以太网报文格式: 详细的说明,请看<MAC 头部报文分析>. IP 报文格式: 详细的说明,请看<IP 数据报格式详解>. UDP 报文格式: 详细的说明,请看<UDP ...
- LINUX 下tcp 和 udp 套接字收发缓冲区的大小决定规则 .
const int udp_recvbufsize = 384 * 1024 ; int result = ::setsockopt(m_hSocket, SOL_SOCKET, SO_RCVBUF, ...
- Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)
Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...
最新文章
- 明天参加GDG devfest
- Ie6下asp.net 中treeview自动随鼠标变小的修复
- 使用jQuery清空file文件域的解决方案
- navicat 官方使用手册,中文版,快捷键大全
- 转载一篇杨澜的演讲稿——关于孩子的想象力创造力
- Freebsd屏幕字体的调节
- CF468C Hack It! 构造
- java工具类专利申请文档_Java工具类 (3)------WordUtils------利用Poi根据模板生成新的word文档...
- C语言课程设计:课程管理系统
- 硅谷外卖安装axios报错
- Latex 中文使用方法和示例——分别基于MiKTeX(CTeX套装)、TeXLive 编译系统测试CJK、ctex 宏包,PDFLaTeX、XeLaTeX编译命令及GBK、UTF-8文件编码的使用
- 免费全球网络学习学院上线以支持妇女发展
- 三方登录——新浪微博登陆
- html在w3c很多错误,在w3c中验证时发生CSS解析错误
- 传统图像特征提取方法列表
- 文件排版2.2 (python)
- VMware win7 x64虚拟机安装
- pdf编辑器免安装版_墙裂推荐!功能强大的PDF编辑器最新免安装版!
- Addressable设置的要点
- 抖音头条小程序常见的问题
热门文章
- p40与p100训练性能对比
- 15000个开源项目中挑选Top 12
- jsp打印日志完整配置
- MySQL从入门到搞定实战
- 炫舞时代服务器维护中怎么办,炫舞时代出bug是怎么回事 具体事件详细始末
- linux主题文件,美化你的Linux!23个精美Ubuntu主题下载
- git pull没有更新成功_因为 git pull 和同事闹僵了。
- 非标准配置linux,剖析非标准波特率的设置和使用于Linux操作系统中
- hdfs mv命令_大数据入门:HDFS文件管理系统简介
- 树莓派python3.7_[Linux] 树莓派编译python3.7.4