有没有数据丢失?

时间:2010-12-25 11:37:27

标签: networking network-programming

以下是一些引自Douglas.E.Comer的代码<计算机网络和互联网>第4版。该程序将发回收到的任何数据。

...
while((len = recv(conn, buff, BUFFERSIZE,0)) >0) // receive data
        send(conn, buff, len, 0); // send it back
...

我想知道,如果代码在send(..)函数中执行时某些数据到达了,它会错过那些数据吗?因为没有执行recv()函数。如果没有遗漏数据,数据保存在哪里?由谁?

...谢谢

2 个答案:

答案 0 :(得分:3)

系统缓冲传入数据,直到调用recv()函数的 next 时为止。尚未读取的数据存储在操作系统内的缓冲区中,而不是存储在应用程序内部。您不会使用这样的循环“错过”传入的数据。

答案 1 :(得分:1)

每个套接字都有一个相关的内存缓冲区,其中数据被缓冲,当你调用recv API时,如果缓冲区中存在某些数据则从缓冲区读取数据,否则调用等待直到套接字缓冲区中的某些数据可用。