sockets - 套接字如何不丢失到达的数据?

标签 sockets networking

典型的套接字程序示例如下:

while(1){
   data = socket.recv()
   //do some work
}

由于你不知道包裹何时到达,所以它必须阻塞等待,直到从监听端口获取一些数据,假设程序在收到另一端的命令后开始繁重的工作,在工作期间,另一个包裹到达,但是因为此时你正在做工作,你没有监听端口,所以无论你处理工作的速度有多快,你都可能会错过包裹。

那么套接字如何处理所有数据而不丢失任何数据?

最佳答案

操作系统有 receive buffer它保存已从网络接收但尚未被应用程序接收的数据包。如果该缓冲区已满,数据包就会丢失。当数据包到达时,您不必进行 recv() 调用,但您应该确保足够频繁地调用它以防止缓冲区溢出。

关于sockets - 套接字如何不丢失到达的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18319238/

相关文章:

java - 局域网内多个android设备之间的通信桌面

C# 异步 TCP 套接字 : Handling buffer size and huge transfers

javascript - socket.io 使用 for 循环添加 socket.on 方法

node.js - 从服务器 `socket.io` 触发 (`node.js` 事件),而不是从客户端

linux - Grails run-app 在 VM VirtualBox : hangs on build, 上失败无法访问服务器

c - 关于 pipeline、fork 和 if 语句的初学者问题

java - 互联网监听器 Android 示例

node.js - nginx 作为网络服务器,包括。 socket.io 和 node.js/ws ://400 Bad Request

c - 在选择阻塞时向 fd_Set 添加新的 FD

networking - getifaddrs(3) 返回的列表的顺序重要吗?