1 /* Compile with -lrt */
11 #include <sys/socket.h>
17 static sig_atomic_t sigint
= 0;
19 static inline double timespec_to_double(const struct timespec
*time
)
21 return time
->tv_nsec
* 1E-9 + (double) time
->tv_sec
;
24 static void sig_handler(int sig
)
34 struct timespec before
, after
;
35 unsigned long long pkts
= 0, byte
= 0;
36 double x1
, x2
, elapsed
;
39 fprintf(stderr
, "Not root?!\n");
43 signal(SIGINT
, sig_handler
);
45 sock
= socket(AF_LANA
, SOCK_RAW
, 0);
51 printf("Hit key to start!\n");
53 printf("Abort with ^C\n");
55 memset(&before
, 0, sizeof(before
));
56 memset(&after
, 0, sizeof(after
));
58 clock_gettime(CLOCK_REALTIME
, &before
);
60 ret
= recv(sock
, buff
, sizeof(buff
), 0);
69 clock_gettime(CLOCK_REALTIME
, &after
);
71 x1
= timespec_to_double(&after
);
72 x2
= timespec_to_double(&before
);
77 printf("time: %lf, pkts/s: %.2lf, bytes/s: %.2lf\n",
78 elapsed
, 1.0 * pkts
/ elapsed
, 1.0 * byte
/ elapsed
);