int pcap_loop(pcap_t *p, int cnt,
pcap_handler callback, u_char *user)
pcap_loop 함수는 pcap_open_live 함수나 pcap_create 함수로 만들어진 pcap_t handler를 cnt번 만큼 반복하는 함수이다.
Description[document]
pcap_t *p: packet을 다루기 위한 handler
int cnt: 최대 cnt 만큼의 callback을 반복 한다. (0또는 -1인 경우 무한히 반복)
pcap_handler callback: cnt 만큼 반복할 함수이다.
u_char *user: callback 함수로 전달 되는 포인터이다.
Return
cnt만큼 반복했거나, savefile의 끝에 도달했다면 0을 반환한다.
오류가 발생했을 때 -1을 반환하며, 만약 패킷이 처리되기전에 pcap_breakloop()가 호출 되었다면, -2를 반환한다.
실시간 패킷 캡처 버퍼에서 타임 아웃이 발생해도 에러를 리턴하지 않고 지속적으로 패킷을 받기위해 대기한다.
pcap_handler callback
typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *byte);
pcap_handler는 u_char *user, struct pcap_pkthdr *h, uchar *byte를 인자로 가지고 있는 함수 포인터 이다.
Description
u_char *user: pcap_loop 에서 전달 받은 포인터 값
struct pcap_pkthdr *h: pcap_pkthdr 구조체 포인터
u_char *byte: 패킷의 시작 byte를 가르킨다
Return
잡담
이제 대부분의 함수들이 모였다. 지금 까지 정리된 것 만으로도 거의 모든 패킷을 캡처 할 수 있으며,
잘만 만든다면야 모든 패킷을 다룰 수 있다.
아, 차후에 pcap_dispatch함수를 정리하면서 pcap_loop와 어떤 점이 다른지 정리해보려고 한다.