summaryrefslogtreecommitdiff
path: root/netsniff-ng.c
diff options
context:
space:
mode:
Diffstat (limited to 'netsniff-ng.c')
-rw-r--r--netsniff-ng.c19
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);