xref: /iperf/examples/mis.c (revision 8bdc8fff)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <string.h>
5 #include <sysexits.h>
6 #include <stdint.h>
7 
8 #include <iperf_api.h>
9 
10 int
11 main( int argc, char** argv )
12 {
13     char* argv0;
14     int port;
15     struct iperf_test *test;
16     int consecutive_errors;
17 
18     argv0 = strrchr( argv[0], '/' );
19     if ( argv0 != (char*) 0 )
20 	++argv0;
21     else
22 	argv0 = argv[0];
23 
24     if ( argc != 2 ) {
25 	fprintf( stderr, "usage: %s [port]\n", argv0 );
26 	exit( EXIT_FAILURE );
27     }
28     port = atoi( argv[1] );
29 
30     test = iperf_new_test();
31     if ( test == NULL ) {
32 	fprintf( stderr, "%s: failed to create test\n", argv0 );
33 	exit( EXIT_FAILURE );
34     }
35     iperf_defaults( test );
36     iperf_set_verbose( test, 1 );
37     iperf_set_test_role( test, 's' );
38     iperf_set_test_server_port( test, port );
39 
40     consecutive_errors = 0;
41     for (;;) {
42 	if ( iperf_run_server( test ) < 0 ) {
43 	    fprintf( stderr, "%s: error - %s\n\n", argv0, iperf_strerror( i_errno ) );
44 	    ++consecutive_errors;
45 	    if (consecutive_errors >= 5) {
46 	        fprintf(stderr, "%s: too many errors, exitting\n", argv0);
47 		break;
48 	    }
49 	} else
50 	    consecutive_errors = 0;
51 	iperf_reset_test( test );
52     }
53 
54     iperf_free_test( test );
55     exit( EXIT_SUCCESS );
56 }
57