diff options
Diffstat (limited to 'netsniff-ng.c')
-rw-r--r-- | netsniff-ng.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/netsniff-ng.c b/netsniff-ng.c index 0f97acd..ecb9e9a 100644 --- a/netsniff-ng.c +++ b/netsniff-ng.c @@ -131,6 +131,21 @@ static void timer_elapsed(int unused) setitimer(ITIMER_REAL, &itimer, NULL); } +static void timer_purge(void) +{ + int ret; + + ret = pull_and_flush_tx_ring_wait(tx_sock); + if (unlikely(ret < 0)) { + if (errno != EBADF && errno != ENOBUFS) + panic("Flushing TX_RING failed: %s!\n", strerror(errno)); + } + + set_itimer_interval_value(&itimer, 0, 0); + setitimer(ITIMER_REAL, &itimer, NULL); +} + + static void timer_next_dump(int unused) { set_itimer_interval_value(&itimer, interval, 0); @@ -289,6 +304,8 @@ static void pcap_to_xmit(struct ctx *ctx) bug_on(gettimeofday(&end, NULL)); timersub(&end, &start, &diff); + timer_purge(); + bpf_release(&bpf_ops); dissector_cleanup_all(); @@ -455,6 +472,8 @@ static void receive_to_xmit(struct ctx *ctx) out: + timer_purge(); + sock_print_net_stats(rx_sock, 0); bpf_release(&bpf_ops); |