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

名称

pcap_next_ex, pcap_next - pcap_t から次のパケットを読み込む

書式


#include <pcap/pcap.h>


int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header,
const u_char **pkt_data);
const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h);

解説

pcap_next_ex() は、次のパケットを読み込んで、成功/失敗の指示を返します。パケットが問題なしで読み込まれたなら、 pkt_header 引数によって指されたポインタは、パケットのために pcap_pkthdr 構造体を指すように設定され、 pkt_data 引数によって指されたポインタは、パケット中のデータを指すように設定されます。 struct pcap_pkthdr とパケットデータは、呼び出し側によって解放することができず、 pcap_next_ex(), pcap_next(), pcap_loop() または pcap_dispatch() への次の呼び出しの後に有効であることは保証されません。コードが有効なままであるためにそれらを必要とするなら、それらのコピーを行わなければなりません。

pcap_next() は、(1 の cnt を付けて pcap_dispatch() を呼び出すことによって) 次のパケットを読み込に、そのパケット中のデータへの u_char ポインタを返します。パケットデータは、呼び出し側よって解放することができず、 pcap_next_ex(), pcap_next(), pcap_loop() または pcap_dispatch() への次の呼び出しの後に有効であることは保証されません。コードが有効なままであるためにそれらを必要とするなら、それらのコピーを行わなければなりません。 h によって指された pcap_pkthdr 構造体は、パケットのための適切な値で満たされます。

戻り値

pcap_next_ex() は、パケットが問題なしで読み込まれたなら、1 を返し、パケットがライブキャプチャ (捕獲) から読み込まれ、タイムアウトの期限が切れたなら、0 を返し、パケットを読み込んでいる間にエラーが起こったなら、-1 を返し、パケットが ``savefile'' から読み込まれていて、savefile から読み込むパケットがそれ以上のないなら、-2 を返します。-1 が返されるなら、 pcap_geterr() または pcap_perror() は、取って来るか、またはエラーテキストを表示する引数として p を付けて呼び出されます。

pcap_next() は、成功すればパケットデータへのポインタを返し、エラーが起これるか、または、ライブキャプチャ (捕獲) から読み込むパケットがなかった (例えば、パケットフィルタを渡さなかったので、それらが捨てられたか、または任意のパケットが到着する前に開始する読み込みタイムアウトをサポートするプラットフォームで、任意のパケットが到着する前にタイムアウトの期限が切れるなら、またはキャプチャ (捕獲) デバイスのためのファイル記述子が非ブロッキングモードであり、読み込むパケットが利用可能でなかったなら) か、 ``savefile'' に利用可能なパケットがそれ以上ないなら、 NULL を返します。残念ながら、エラーが起こったかどうかを決定する方法は、ありません。

関連項目

pcap(3), pcap_geterr(3), pcap_dispatch(3)
5 April 2008