2017-04-24 183 views
0

是什麼在C代碼簡稱像TCP接收緩衝區

recvfrom(sock, buffer, 20, 0, (struct sockaddr *)&c_addr, &addr_size); 

而且可以有它的大小設置套接字選項(在C調整緩衝區緩存之間的差別,但我認爲其他編程語言有相同的套接字選項)?

我的困惑來自recvfrom代碼中稱爲「buffer」的緩衝區,可以合理地稱爲接收緩衝區,它也是TCP中使用的緩衝區的名稱。我想澄清一下,recvfrom代碼中提到的緩衝區是一種不同的緩衝區,也許有什麼不同。

假設它們不同,就5層網絡模型而言,第二種類型的緩衝區基本上只是用於傳輸層,並且通常不可修改(除了能夠改變它的一般性質,如大小)應用層?換句話說,TCP接收緩衝區中的數據是否傳遞到recvfrom代碼中稱爲「buffer」的緩衝區?

+0

[tag:osi]與它沒有任何關係,或與其他任何東西有20年關係。讓它安息吧。 – EJP

回答

0

您指的接收緩衝區是操作系統中的內部緩衝區,在用戶空間程序通過recvrecvfrom函數調用訪問數據之前,傳入數據將被存儲。

這與上面代碼中的buffer不同,因爲它是應用程序緩衝區。

如果應用程序沒有讀取數據包的速度比操作系統正在接收數據包的速度快,則操作系統中的接收緩衝區將滿滿並且數據包將被丟棄。

+2

數據包不會被丟棄,因爲它們不會被髮送。 TCP將關閉他接收窗口並且發送者將停止發送。 – EJP