2

一个典型的套接字程序示例是这样的:

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

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

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

4

1 回答 1

2

操作系统有一个接收 缓冲区,它保存已经从网络接收到但尚未recv()被应用程序处理的数据包。如果该缓冲区填满,数据包将丢失。当数据包到达时,您不必在recv()通话中,但您应该确保您经常调用它以防止缓冲区溢出。

于 2013-08-19T17:15:57.833 回答