2010-11-25 70 views
1

是-1 pcap的有效讀取超時?pcap的零讀取超時

有人告訴我,在pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *errbuf);中將to_ms設置爲-1會導致它在檢測到數據包時立即返回 - 實際上是零超時。很有意義的是,有一些方法可以設置零超時,但爲什麼不使-1爲無限且0爲0?這會更合乎邏輯。另外,我還無法確認pcap上-1的to_ms值有什麼影響。

那麼,-1是一個有效的超時值?如果是這樣,它有什麼影響?如果沒有,有沒有辦法將檢測超時設置爲零?

回答

1

我不認爲你的解釋是有道理的。

只有當沒有數據存在纔會被讀取時,讀取呼叫的超時纔會進入播放狀態。在你的情況下,如果一個數據包是從來沒有收到,那麼超時應該控制呼叫在返回之前等待的時間。如果收到數據,超時並不重要,因爲只要檢測到(並讀取)數據,該調用就必須立即返回,這就是您要求的做法。

reading the code,似乎在PCAP負超時的意思是「非阻塞模式」,這將使其並不等待,但如果沒有可用的數據,而不是直接返回。

+0

你誤會了。在這種情況下,讀取超時適用於需要讀取數據包的地方 - 從手冊頁引用,「讀取超時用於安排在看到數據包時讀取不一定立即返回,而是等待一定數量的時間來允許更多的數據包到達並且在一次操作中從OS內核讀取多個數據包。因此讀取超時會在檢測到數據包後延遲返回。 – Benubird 2010-11-25 10:19:57