我試圖使用數據下面的代碼從套接字讀取:讀取數據使用讀取功能
n = read(fd, buffer, 50000);
的問題是:當從網絡服務器中的數據比TCP封裝尺寸較大,這些數據將被分成多個包。在這種情況下,read函數只是從fd讀取一個數據包,或者它會讀取fd中的所有包?
請注意,讀取函數只被調用一次。
我試圖使用數據下面的代碼從套接字讀取:讀取數據使用讀取功能
n = read(fd, buffer, 50000);
的問題是:當從網絡服務器中的數據比TCP封裝尺寸較大,這些數據將被分成多個包。在這種情況下,read函數只是從fd讀取一個數據包,或者它會讀取fd中的所有包?
請注意,讀取函數只被調用一次。
由於您使用的是TCP,因此您的套接字類型爲SOCK_STREAM
。 A SOCK_STREAM
套接字是一個字節流,並且不維護數據包邊界,因此如果接收到多個數據包並且緩衝區中有足夠空間,對read()
或recv()
的調用將讀取來自多個數據包的數據。如果緩衝區的大小不足以容納所有數據,它也可能從數據包的一部分返回數據。下一個read()
將繼續讀取下一個字節。
功能read
接收最大字節指定計數,在你的榜樣50000
當函數返回read
,您需要檢查返回值。寫入緩衝區的實際字節數在變量n
中。
你用什麼語言編程? – 2011-02-25 15:24:21
我的編程語言是C++ – cheng 2011-02-25 15:28:59