tstamp->tv_sec, tstamp->tv_nsec/1000);
}
-void print_msg_info(struct msg_info *mi)
+void msg_info_print(FILE *f, struct msg_info *mi)
{
struct timespec diff;
void *local = talloc_new (NULL);
#define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff))
if (num_interfaces == 2)
- printf("%s -> %s (%s) = %s (%s)\n",
+ fprintf(f, "%s -> %s (%s) = %s (%s)\n",
S(mi->ts_sent), S(mi->ts_rx_final_kern), S(mi->ts_rx_final),
DIFF(mi->ts_sent, mi->ts_rx_final_kern),
DIFF(mi->ts_sent, mi->ts_rx_final));
else
- printf("%s -> %s (%s) -> %s (%s) = %s (%s), %s (%s)\n",
+ fprintf(f, "%s -> %s (%s) -> %s (%s) = %s (%s), %s (%s)\n",
S(mi->ts_sent),
S(mi->ts_rx_onwire_kern), S(mi->ts_rx_onwire),
S(mi->ts_rx_final_kern), S(mi->ts_rx_final),
struct timespec next, now, diff;
clock_gettime(CLOCK_MONOTONIC, &next);
- while (!finish_flag && (opt.count == 0 || count < opt.count)) {
+ int completed = 0;
+ while (!finish_flag && (opt.count == 0 || completed < opt.count)) {
struct pollfd pfd[1];
pfd[0].fd = completion_pipe[0];
pfd[0].events = POLLIN;
error(1, errno, "poll main");
if (ret > 0 && (pfd[0].revents & POLLIN)) {
struct msg_info *mi;
- read(completion_pipe[0], &mi, sizeof(mi));
+ int ret;
+ ret = read(completion_pipe[0], &mi, sizeof(mi));
+ if (ret < sizeof(mi))
+ error(1, errno, "read completion returned %d", ret);
if (opt.file)
- msg_info_store(opt.file, mi);
+ msg_info_print(opt.file, mi);
msg_info_free(mi);
+ completed++;
}
clock_gettime(CLOCK_MONOTONIC, &now);