Я думаю, что ваша проблема в том, что вы устанавливаете отрицательное значение для to_ms , то есть время ожидания буфера, в вашем вызове
pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf)
Как указано в здесь , 4-й параметр в pcap_open_live ()
указывает время ожидания буфера пакета в качестве неотрицательного значения в миллисекундах
Если вы читаете главную страницу pcap , в ней говорится, что
тайм-аут буфера пакетов :
Еслипри захвате пакеты доставляются сразу после их поступления, приложение, которое захватывает пакеты, будет активировано для каждого пакета по мере его поступления, и может потребоваться сделать один или несколько вызовов операционной системы для извлечения каждого пакета.Если вместо этого пакеты не доставляются сразу после их поступления, а доставляются после небольшой задержки (называемой «тайм-аутом буфера пакетов»), перед доставкой пакетов может быть накоплено более одного пакета, так что один пробуждение приведет кдолжно быть сделано для нескольких пакетов, и каждый набор обращений к операционной системе будет предоставлять несколько пакетов, а не один пакет.Это уменьшает нагрузку на ЦП для каждого пакета, если пакеты поступают с высокой скоростью, увеличивая количество пакетов в секунду, которые могут быть перехвачены.Тайм-аут буфера пакетов необходим, чтобы приложение не дожидалось заполнения буфера захвата операционной системы до доставки пакетов;если пакеты приходят медленно, это ожидание может занять произвольно длительный период времени.
В конце этого параграфа говорится, что:
Недопустимое отрицательное значение;результат установки отрицательного значения тайм-аута непредсказуем.
Поэтому я предлагаю вам попытаться установить это значение равным 0 или положительным значениям, чтобы увидеть, соответствует ли поведение ожидаемому.