tags:

views:

152

answers:

1

Hi all,

I have a pcap_loop function in another function, that captures packets until the user stops it, i.e.

void functionA()
{
   signal(SIGINT, terminate_process); 
   pcap_loop(handle, -1, callback, NULL);
   ...

}

void terminate_process(int signum)
{
   pcap_breakloop(handle);
   pcap_close(handle);
} 

Is it possible to set a duration for when packets would be captured? Something like:

if (time(NULL) - start_time > 100)
   pcap_breakloop(handle);

But I don't know where to put this, because so far all the examples I've seen used pcap_breakloop in a signal handler, which requires user intervention. How will the time condition be checked while pcap_loop is running?

Thank you.

Regards, Rayne

+1  A: 

You can use alarm to generate a signal after a given number of seconds:

void functionA()
{
    signal(SIGALRM, terminate_process); 
    alarm(100);
}
R Samuel Klatchko
Thanks. This works in linux, but not in windows since SIGALRM does not exist.
Rayne
@Rayne - unfortunately, I'm not an expert on the Windows API so don't know if there's something similar to `alarm`. You can always start a thread that calls `Sleep` and then `pcap_breakloop`.
R Samuel Klatchko