c - 以太网缓冲区可以填满并且不允许另一个进程接收()以太网数据包吗?
问题描述
假设您有一个从服务器接收大文件的进程。
如果您不执行 recv() 调用,它会永远留在以太网控制器的缓冲区中吗?
如果另一个进程需要接收数据并且另一个进程的缓冲区已满,它是否需要等到另一个进程执行 recv() 或缓冲区超时?
如果您有多个进程发送和接收数据,是否必须等到缓冲区为空。?或者它可以多路复用它并在驱动程序级别或套接字库的某些部分进行跟踪?
编辑:拼写
解决方案
- 如果您不执行 recv() 调用,它会永远留在以太网控制器的缓冲区中吗?
不,数据永远不会在以太网控制器的缓冲区中停留很长时间;内核将尽可能快地将数据从以太网控制器的缓冲区中读取到您的套接字缓冲区(在计算机的常规 RAM 中)。如果您的套接字缓冲区已满,则传入的数据将被丢弃。
- 如果另一个进程需要接收数据并且另一个进程的缓冲区已满,它是否需要等到另一个进程执行 recv() 或缓冲区超时?
每个套接字在计算机的主 RAM 中都有自己独立的缓冲区,每个进程都有自己的套接字,因此进程不必等待彼此的缓冲区清空。
- 如果您有多个进程发送和接收数据,是否必须等到缓冲区为空。?
请参阅问题 2 的答案,因为它也回答了这个问题。
推荐阅读
- java - JavaFX - 我无法更改 TextField 的文本,除非我从这个方法中执行它,并且它真的只发生在这个方法中,在我的控制器类中
- javascript - Discordjs如何在记录发送的消息或附件之前设置延迟?
- javascript - 如何将文本和图像传递给数组
- javascript - 从 JSON 文件配置函数
- facebook-opengraph - 在线课程页面的开放图形类型
- javascript - onSubmit 表单将数据发送到 React 中的另一个组件/路由
- javascript - 用 ThreeJS 替换空间中的平面
- python - 如果 S3 上已经存在相同的图像,如何避免使用 scrapy 图像管道上传相同的图像?
- python - 如何将项目从 QTreeWidget 移动到 QListWidget?
- javascript - 数据表特定列数据截断不适用于 chrome