我創建了一個原始套接字,它從數據鏈接層獲取所有IPv4數據包(數據鏈接層頭已被移除)。並且爲了讀取我使用的數據包recvfrom
。在原始套接字中使用recvfrom():一般疑問
我的疑問是: 假設由於某些調度由OS完成,我的過程睡了1秒。當它醒來時,它在這個原始套接字(其目的是接收只有一個 IPv4分組並且假定這個分組的大小是380字節)上做了recvfrom
(接收字節數1000)。假設許多網絡應用程序在此期間也同時運行,所以所有IPv4數據包必須已在此套接字的接收緩衝區中排隊。因此,現在recvfrom
將返回全部1000字節(從第381字節開始的其他IPv4數據包)bcoz它的緩衝區中有足夠的數據返回。雖然我的程序只是爲了理解只有一個IPv4數據包
那麼如何防止這件事呢?我應該逐字節讀取並解析每個字節,但效率非常低。
你在使用什麼操作系統? – abyx 2009-11-25 10:22:42
可以請你發佈你的代碼!!!! – 2011-01-27 12:22:39