2010-11-25 9 views
1

pcapの有効な読み取りタイムアウトは-1ですか?pcapの読み出しタイムアウトがゼロになる

pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *errbuf);のto_msを-1に設定すると、パケットが検出されたときに即座に戻り、実際にはゼロタイムアウトになることが伝えられました。タイムアウトをゼロに設定する方法がいくつかあるが、-1を無限に、0を0にするのはどうしてですか?それはより論理的です。また、-1のto_ms値がpcapに及ぼす影響を確認する方法はありませんでした。

有効なタイムアウト値は-1ですか?もしそうなら、どのような効果がありますか?そうでない場合は、検出タイムアウトをゼロに設定する方法はありますか?

答えて

1

あなたの説明は意味をなさないと思います。

が読み取られるデータが存在しない場合は、読み取り呼び出しのタイムアウトが発生するのはです。あなたのケースでは、パケットがでない場合、が受信された場合、タイムアウトは、コールが待機する周りの時間、返される前の時間を制御する必要があります。データが受信された場合、タイムアウトは問題にはなりません。なぜなら、コールがデータを検出(および読み込み)するとすぐにコールを返さなければならないからです。 reading the codeから

は、PCAPにおける負のタイムアウトが、それはすべてで待機ない作るが、使用可能なデータがない場合は代わりに直接返します「非ブロックモード」を、意味らしいです。

+0

あなたは誤解しています。この場合の読み込みタイムアウトは、読み込まれるべきパケットがある場合に適用されます。 - マニュアルページから引用するために '読み込みタイムアウトは、パケットが見えるときに読み込みが必ずしも返されないようにするために使用されますが、より多くのパケットが到着し、OSカーネルから複数のパケットを一度に読み取ることができるようになる。したがって、読み取りタイムアウトは、パケットを検出した後にそれが返るのを遅らせる原因となります。 – Benubird

+0

コードを見ると、私は@unwindに同意します。 – jrwren

関連する問題