#include #include #include #include #include #include #include #include #define PERIOD 1 #define MEGABYTE (1<<20) #define KILOBYTE (1<<10) char buffer[512]; int sd; union { struct sockaddr sa; struct sockaddr_in sin; } saddr; int flag = 0; void alrm (int sig) { flag = 1; } int main(int argc, char *argv[]) { int i, rc; clock_t start, stop, elapsed; long bytes = 0; if (argc < 2) { fprintf(stderr, "thruput netaddr\n"); return 0; } saddr.sin.sin_port = htons(19); saddr.sin.sin_addr.s_addr = inet_addr(argv[1]); sd = socket(AF_INET, SOCK_STREAM, 0); if (sd < 0) { perror("socket"); return sd; } connect(sd, &saddr.sa, sizeof(saddr.sa)); if (!sd) { perror("connect"); return sd; } read(sd, buffer, sizeof(buffer)); signal(SIGALRM, alrm); alarm(PERIOD); for (;;) { if (flag) { fprintf(stderr, "%.0f b/sec %.0f B/sec %.2f KB/sec %.2f MB/sec\n", (float)bytes * 8 / PERIOD, (float)bytes / PERIOD, (float)bytes / KILOBYTE / PERIOD, (float)bytes / MEGABYTE / PERIOD); flag = 0; signal(SIGALRM, alrm); alarm(PERIOD); bytes = 0; } rc = read(sd, buffer, sizeof(buffer)); if (rc <= 0) { exit(1); } bytes += rc; } close(sd); return 0; }