Как использовать pcap_breakloop? - PullRequest
3 голосов
/ 04 марта 2010

У меня есть функция pcap_loop в другой функции, которая захватывает пакеты пока пользователь не остановит это, т.е.

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

}

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

Можно ли установить продолжительность, когда пакеты будут перехватываться? Что-то вроде:

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

Но я не знаю, где это разместить, потому что пока все примеры, которые я видел, использовали pcap_breakloop в обработчике сигналов, который требует вмешательства пользователя. Как будет проверяться условие времени во время работы pcap_loop?

Спасибо.

С уважением, Rayne

1 Ответ

3 голосов
/ 04 марта 2010

Вы можете использовать будильник для генерации сигнала через заданное количество секунд:

void functionA()
{
    signal(SIGALRM, terminate_process); 
    alarm(100);
}
...