diff -urpN bwping/bwping.c bwping-patched/bwping.c --- bwping/bwping.c 2012-10-11 19:23:17.000000000 +0200 +++ bwping-patched/bwping.c 2017-04-20 09:06:23.449540033 +0200 @@ -26,6 +26,7 @@ #include #include #include +#include #ifdef __CYGWIN__ #include "cygwin.h" @@ -224,21 +225,39 @@ static int recv_ping (int sock, int iden return 0; } } +unsigned int transmitted_number, received_number; +unsigned long int received_volume; +struct timeval begin, end; + +void sig_handler(int signo) +{ + if (signo == SIGUSR1) { + printf("Total: pkts sent/rcvd: %u/%u, volume rcvd: %lu bytes, time: %d sec, speed: %lu kbps, rtt min/max/average: %llu/%llu/%llu ms\n", + transmitted_number, received_number, received_volume, (int)(end.tv_sec - begin.tv_sec), + end.tv_sec - begin.tv_sec?((received_volume / (end.tv_sec - begin.tv_sec)) * 8) / 1000:(received_volume * 8) / 1000, + min_rtt==DEF_MIN_RTT?0:min_rtt, max_rtt, average_rtt); + exit(255); + } +} int main (int argc, char **argv) { int sock, exitval, ch, ident, finish, pktburst, i, n; - unsigned int bufsize, tos, transmitted_number, received_number; - unsigned long int kbps, pktsize, volume, rperiod, received_volume; + unsigned int bufsize, tos; + unsigned long int kbps, pktsize, volume, rperiod; unsigned long long int min_interval, interval, current_interval, integral_error; char *ep, *bind_addr, *target; fd_set fds; struct sockaddr_in bind_to, to; struct hostent *hp; - struct timeval begin, end, report, start, now, seltimeout; + struct timeval report, start, now, seltimeout; sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); + if (signal(SIGUSR1, sig_handler) == SIG_ERR) + printf("\ncan't catch SIGUSR1\n"); + + if (sock==-1) { perror("bwping: socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) failed");
Download : patch-bwping-sig.diff
bwping patch (catching signals)