以下是一些引自Douglas.E.Comer的代码<计算机网络和互联网>第4版。该程序将发回收到的任何数据。
...
while((len = recv(conn, buff, BUFFERSIZE,0)) >0) // receive data
send(conn, buff, len, 0); // send it back
...
我想知道,如果代码在send(..)函数中执行时某些数据到达了,它会错过那些数据吗?因为没有执行recv()函数。如果没有遗漏数据,数据保存在哪里?由谁?
...谢谢
答案 0 :(得分:3)
系统缓冲传入数据,直到调用recv()
函数的 next 时为止。尚未读取的数据存储在操作系统内的缓冲区中,而不是存储在应用程序内部。您不会使用这样的循环“错过”传入的数据。
答案 1 :(得分:1)
每个套接字都有一个相关的内存缓冲区,其中数据被缓冲,当你调用recv API时,如果缓冲区中存在某些数据则从缓冲区读取数据,否则调用等待直到套接字缓冲区中的某些数据可用。