bwping patch (catching signals)
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