EN JA
PCAP_GET_SELECTABLE_FD(3)
PCAP_GET_SELECTABLE_FD(3) FreeBSD Library Functions Manual PCAP_GET_SELECTABLE_FD(3)

名称

pcap_get_selectable_fd -ライブキャプチャ (捕獲) のために select() を行うことができるファイル記述子を取得する

書式


#include <pcap/pcap.h>


int pcap_get_selectable_fd(pcap_t *p);

解説

UNIX で、 pcap_get_selectable_fd() は、 select() または poll() を行うことができるファイル記述子が存在しているなら、ブロックすることなしでパケットを読み込むことを可能とするためにウェートするそのような記述子のためのファイル記述子番号を返し、そのような記述子が存在していないなら、-1 を返します。 pcap_create()pcap_activate() または pcap_open_live() でオープンされたいくつかのネットワークデバイスは、 select() または poll() (例えば、FreeBSD 4.3 と 4.4 の通常のネットワークデバイスと Endace DAG デバイス) をサポートしないので、それらのデバイスのために、-1 が返されます。

次の

FreeBSD 4.6 より前の FreeBSD;
NetBSD 3.0 より前の NetBSD;
OpenBSD 2.4 より前の OpenBSD:
Mac OS X 10.7 より前の Mac OS X;

で、 select()poll() は、正しく BPF デバイスで動作しないことに注意してください。 pcap_get_selectable_fd() は、(FreeBSD 4.3 と 4.4 を例外として) それらのバージョンのほとんどでファイル記述子を返しますが、単純な select() または poll() は、たとえ、それ以前に読み込みタイムアウトの期限が切れたとしても、記述子が、満杯のバッファの価値のパケットが受信されるまで、読み込み可能であることを示しません。この次善策のために、到着するパケットを待つ select() または poll() を使用するアプリケーションは、非ブロッキングモードに pcap_t をしれなければならなくて、 select() または poll() に、読み込みタイムアウト以下のタイムアウトがあるようにアレンジしなければならなくて、 pcap_t のためのファイル記述子を示す select() または poll() が、読み込む準備ができているかどうかにかかわらす、タイムアウトの期限が切れた後にパケットを読み込むように試みなければなりません。 (その次善策は、FreeBSD 4.3 以降で動作しません。しかしながら、FreeBSD 4.6 以降で、 select()poll() は、BPF デバイスで正確に動作するので、被害はありませんが、次善策は、必要ありません。)

また、 poll() は、Mac OS X 10.4 と 10.5 の BPF デバイスを含んで、キャラクタスペシャルファイルで動作しません、一方 pcap_get_selectable_fd() によって返された記述子で select() を使用することができ、 Mac OS X のそれらのバージョンで poll() を使用できないないことに注意してください。 kqueue もその記述子で動作しません。 kqueue ではなく、 poll() は、10.4 よりの前の Mac OS X リリースのその記述子で動作します。 poll() と kqueue は、Mac OS X 10.6 以降のその記述子で動作します。

pcap_get_selectable_fd() は、Windows で利用可能ではありません。

戻り値

選択可能なファイル記述子が存在しているなら、返されます。そうでなければ、-1 が返されます。

関連項目

pcap(3), select(2), poll(2)
5 April 2008