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
)
30 int main(int argc
, char **argv
)
34 struct timespec before
, after
;
35 unsigned long long pkts
= 0, byte
= 0, max
;
36 double x1
, x2
, elapsed
;
39 fprintf(stderr
, "Not root?!\n");
43 fprintf(stderr
, "No pkt number given!\n");
46 max
= (unsigned long long) atol(argv
[argc
- 1]);
48 // signal(SIGINT, sig_handler);
50 sock
= socket(AF_LANA
, SOCK_RAW
, 0);
56 printf("Hit key to start!\n");
58 printf("Abort with ^C\n");
60 memset(&before
, 0, sizeof(before
));
61 memset(&after
, 0, sizeof(after
));
63 clock_gettime(CLOCK_REALTIME
, &before
);
64 while (!sigint
|| pkts
> max
) {
65 ret
= recv(sock
, buff
, sizeof(buff
), 0);
75 clock_gettime(CLOCK_REALTIME
, &after
);
77 x1
= timespec_to_double(&after
);
78 x2
= timespec_to_double(&before
);
83 printf("time: %lf, pkts/s: %.2lf, bytes/s: %.2lf\n",
84 elapsed
, 1.0 * pkts
/ elapsed
, 1.0 * byte
/ elapsed
);