以前一直有这么一个小小的疑惑,当一个进程注册一个套接字后,如果这个套接字没有被调用recv函数接受数据包,那么这个套接字能接受到数据包吗? 或者这样说,如果我的程序注册了一个套接字去接受数据包,但是每收到一个数据包都需要很长一段时间处理,并且在处理数据包的途中recv函数使没有被调用的,那么如果程序再处理数据包的途中有数据包到来,那我的程序会不会漏过这些数据包(那个包到达的时候程序在处理别的包,而没有调用recv函数)?

答案是不会的。事实上linux中会为每个套接字建立缓存,当属于套接字的包到达的时候,只要这个套接字已经被注册,不管你当时有没有调用recv函数,数据包都会被存在套接字的缓存中(实际上是一个skb结构链表),只要缓存没被填满,你可以随时调用recv函数从缓存中取出数据包处理。本人经过实验发现,数据包在缓存中停放的时间是很长的,个人推测应该是直到这个套接字被关闭。

说到这里的缓存,研究过tcpip的人一定能想到tcp中的滑动窗口流量控制。没错,那里的窗口大小值其实就是你的套接字当前的剩余缓存大小值。默认下套接字的初始缓存大小为8192字节,当然,这个也是可以用套接字选项去调整的。所以,只要一个套接字被注册,那么当数据包到来后该数据包会首先被内核的协议栈处理,此时即使你的程序没有处理这个数据包,这个数据包也会保存在内核的缓存中。

原文:http://blog.csdn.net/l1902090/article/details/37741083

linux通信中recv,linux套接字通信之recv中的缓存机制的研究相关推荐

  1. linux 服务器间通信,Linux 下的进程间通信:套接字和信号 | Linux 中国

    原标题:Linux 下的进程间通信:套接字和信号 | Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的. -- Marty Kalin 本篇是 Linux 下(IPC)系列的第三 ...

  2. Linux本地套接字通信

    1. 本地套接字 socket API原本为网络通信而设计,后来在其基础上扩展出本地套接字机制用于本地进程间通信. 本地套接字为全双工通信方式. 2. 本地套接字的使用 2.1 本地套接字通信步骤 ( ...

  3. 【Linux网络编程】UDP 套接字编程

    [Linux网络编程]UDP 套接字编程 [1]用户数据报协议(UDP) UDP是一个简单的传输层协议,不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数 ...

  4. Linux网络编程——Unix本地套接字

    概述 今天给大家讲解网络编程中的一个内容--Unix 本地套接字. 发现很多人不知道或者不太了解 Unix 本地套接字这个概念,这也难怪,socket API 原本就是为多台主机之间网络通信设计的,并 ...

  5. 【Linux网络编程】原始套接字实例:MAC 地址扫描器

    如果 A (192.168.1.1 )向 B (192.168.1.2 )发送一个数据包,那么需要的条件有 ip.port.使用的协议(TCP/UDP)之外还需要 MAC 地址,因为在以太网数据包中 ...

  6. TCP/IP网络编程---Linux系统下的TCP套接字编程

    目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据 ...

  7. Linux网络编程:原始套接字的魔力【续】

    如何从链路层直接发送数据帧        本来以为这部分都弄完了,结果有朋友反映说看了半天还是没看到如何从链路层直接发送数据.因为上一篇里面提到的是从链路层"收发"数据,结果只&q ...

  8. 【Linux网络编程】原始套接字实例:发送 UDP 数据包

    以太网报文格式: 详细的说明,请看<MAC 头部报文分析>. IP 报文格式: 详细的说明,请看<IP 数据报格式详解>. UDP 报文格式: 详细的说明,请看<UDP ...

  9. LINUX 下tcp 和 udp 套接字收发缓冲区的大小决定规则 .

    const int udp_recvbufsize = 384 * 1024 ; int result = ::setsockopt(m_hSocket, SOL_SOCKET, SO_RCVBUF, ...

  10. Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)

    Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...

最新文章

  1. 明天参加GDG devfest
  2. Ie6下asp.net 中treeview自动随鼠标变小的修复
  3. 使用jQuery清空file文件域的解决方案
  4. navicat 官方使用手册,中文版,快捷键大全
  5. 转载一篇杨澜的演讲稿——关于孩子的想象力创造力
  6. Freebsd屏幕字体的调节
  7. CF468C Hack It! 构造
  8. java工具类专利申请文档_Java工具类 (3)------WordUtils------利用Poi根据模板生成新的word文档...
  9. C语言课程设计:课程管理系统
  10. 硅谷外卖安装axios报错
  11. Latex 中文使用方法和示例——分别基于MiKTeX(CTeX套装)、TeXLive 编译系统测试CJK、ctex 宏包,PDFLaTeX、XeLaTeX编译命令及GBK、UTF-8文件编码的使用
  12. 免费全球网络学习学院上线以支持妇女发展
  13. 三方登录——新浪微博登陆
  14. html在w3c很多错误,在w3c中验证时发生CSS解析错误
  15. 传统图像特征提取方法列表
  16. 文件排版2.2 (python)
  17. VMware win7 x64虚拟机安装
  18. pdf编辑器免安装版_墙裂推荐!功能强大的PDF编辑器最新免安装版!
  19. Addressable设置的要点
  20. 抖音头条小程序常见的问题

热门文章

  1. p40与p100训练性能对比
  2. 15000个开源项目中挑选Top 12
  3. jsp打印日志完整配置
  4. MySQL从入门到搞定实战
  5. 炫舞时代服务器维护中怎么办,炫舞时代出bug是怎么回事 具体事件详细始末
  6. linux主题文件,美化你的Linux!23个精美Ubuntu主题下载
  7. git pull没有更新成功_因为 git pull 和同事闹僵了。
  8. 非标准配置linux,剖析非标准波特率的设置和使用于Linux操作系统中
  9. hdfs mv命令_大数据入门:HDFS文件管理系统简介
  10. 树莓派python3.7_[Linux] 树莓派编译python3.7.4