2010-01-27 149 views

回答

1

有somethng像最大網絡包大小:

MTU

這指示通過網絡的數據傳輸過程中的最大尺寸截止低電平緩衝液(3 ISO/OSI層IP)(未回送)。 以太網絡中通常爲1492。

因此,將數據傳輸優化爲此數量的大小是值得的。

(也有所謂的Jumbo frames打破這個規則,但必須是接受軟件/硬件)

但是簡單的recv()上的插座,可以比MTU返回多個字節。 因此,您需要傳輸第一個數據包與其餘數據的大小。

size = recv(512) // size should came in one shot 
while(count(data) == size) // the rest of actual data can came sliced, so You should receive until size 
    data[offset] = recv(size) 
+0

「*大小應該是一個鏡頭*」嗯......爲什麼?! – 2017-08-14 05:02:30

6
  1. 您可以隨時限制緩衝區的recv(大小)將填補(參數)
  2. 您的應用程序設計不應該是字節的recv(金額大小寫)願意在一個提供呼叫。

它與MTU沒有多大關係。在某些TCP堆棧設計中,對recv()的一次調用不會返回多於一個底層數據包協議的數據報。在其他情況下,它可能與套接字的接收緩衝區一樣大。