From c27f38e5beac63490de1cd01ec1027ca91f837f9 Mon Sep 17 00:00:00 2001 From: Brian Tierney Date: Tue, 3 Nov 2009 05:37:06 +0000 Subject: [PATCH] more work on state cleanup: not yet done --- src/iperf_api.c | 5 ++++- src/iperf_server_api.c | 40 ++++++++++++++++++++++++++-------------- src/iperf_tcp.c | 7 ++++--- src/main.c | 2 +- src/net.c | 1 + 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/iperf_api.c b/src/iperf_api.c index 8faa525..2b6fdd3 100644 --- a/src/iperf_api.c +++ b/src/iperf_api.c @@ -290,6 +290,7 @@ iperf_new_test() { struct iperf_test *testp; + printf("in iperf_new_test: reinit default settings \n"); testp = (struct iperf_test *) malloc(sizeof(struct iperf_test)); if (!testp) { @@ -526,7 +527,7 @@ iperf_reporter_callback(struct iperf_test * test) struct iperf_stream *sp = test->streams; iperf_size_t bytes = 0; double start_time, end_time; - char *message = (char *) malloc(500); + char *message = (char *) malloc(500); /* XXX: define this size in iperf.h */ char *message_final = (char *) malloc(test->num_streams * (strlen(report_bw_jitter_loss_header) @@ -709,6 +710,7 @@ iperf_new_stream(struct iperf_test * testp) int i = 0; struct iperf_stream *sp; + printf("in iperf_new_stream \n"); sp = (struct iperf_stream *) malloc(sizeof(struct iperf_stream)); if (!sp) { @@ -717,6 +719,7 @@ iperf_new_stream(struct iperf_test * testp) } memset(sp, 0, sizeof(struct iperf_stream)); + printf("Allocating new stream buffer: size = %d \n", testp->default_settings->blksize); sp->buffer = (char *) malloc(testp->default_settings->blksize); sp->settings = (struct iperf_settings *) malloc(sizeof(struct iperf_settings)); memcpy(sp->settings, testp->default_settings, sizeof(struct iperf_settings)); diff --git a/src/iperf_server_api.c b/src/iperf_server_api.c index 81f188f..4aa0d21 100644 --- a/src/iperf_server_api.c +++ b/src/iperf_server_api.c @@ -121,11 +121,13 @@ iperf_run_server(struct iperf_test * test) int j, result, message; char *results_string = NULL; + printf("in iperf_run_server \n"); FD_ZERO(&test->read_set); FD_SET(test->listener_sock_tcp, &test->read_set); FD_SET(test->listener_sock_udp, &test->read_set); test->max_fd = test->listener_sock_tcp > test->listener_sock_udp ? test->listener_sock_tcp : test->listener_sock_udp; + printf("iperf_run_server: max_fd set to %d \n", test->max_fd); test->num_streams = 0; test->default_settings->state = TEST_RUNNING; @@ -138,15 +140,15 @@ iperf_run_server(struct iperf_test * test) tv.tv_usec = 0; /* using select to check on multiple descriptors. */ + //printf("calling select.. sock = %d \n", test->max_fd + 1); result = select(test->max_fd + 1, &test->temp_set, NULL, NULL, &tv); - if (result == 0) { //printf("SERVER IDLE : %d sec\n", (int) tv.tv_sec); continue; } else if (result < 0 && errno != EINTR) { - printf("Error in select(): %s\n", strerror(errno)); + printf("Error in select(): %s, socket = %d\n", strerror(errno), test->max_fd + 1); exit(0); } else if (result > 0) { @@ -159,6 +161,7 @@ iperf_run_server(struct iperf_test * test) test->accept(test); test->default_settings->state = TEST_RUNNING; FD_CLR(test->listener_sock_tcp, &test->temp_set); + printf("iperf_run_server: accepted TCP connection \n"); } /* Accept a new UDP connection */ else if (FD_ISSET(test->listener_sock_udp, &test->temp_set)) @@ -177,8 +180,15 @@ iperf_run_server(struct iperf_test * test) { /* find the correct stream - possibly time consuming */ np = find_stream_by_socket(test, j); - message = np->rcv(np); /* get data from client using receiver callback */ - //printf ("iperf_run_server: iperf_tcp_recv returned %d \n", message); + message = np->rcv(np); /* get data from client using + * receiver callback */ + //printf("iperf_run_server: iperf_tcp_recv returned %d \n", message); + if (message < 0) + { + printf("Error reading data from client \n"); + close(np->socket); + return; + } np->settings->state = message; if (message == PARAM_EXCHANGE) @@ -186,13 +196,14 @@ iperf_run_server(struct iperf_test * test) /* copy the received settings into test */ memcpy(test->default_settings, test->streams->settings, sizeof(struct iperf_settings)); } - if (message == ACCESS_DENIED) /* this might get set by PARAM_EXCHANGE */ + if (message == ACCESS_DENIED) /* this might get set by + * PARAM_EXCHANGE */ { - /* XXX: test this! */ + /* XXX: test this! */ close(np->socket); //FD_CLR(np->socket, &test->read_set); iperf_free_stream(np); - } + } if (message == STREAM_END) { /* @@ -221,24 +232,25 @@ iperf_run_server(struct iperf_test * test) do { sp = np; - printf(" closing socket: %d \n", sp->socket); + //printf(" closing socket: %d \n", sp->socket); close(sp->socket); - //FD_CLR(sp->socket, &test->read_set); - np = sp->next; /* get next pointer before freeing */ + FD_CLR(sp->socket, &test->read_set); + np = sp->next; /* get next pointer before + * freeing */ iperf_free_stream(sp); } while (np != NULL); - printf("TEST_END\n\n"); test->default_settings->state = TEST_END; - /* reset cookie with client is finished */ + /* reset cookie when client is finished */ memset(test->default_settings->cookie, '\0', 37); - + break; /* always break out of for loop on TEST_END message */ } } /* end if (FD_ISSET(j, &temp_set)) */ } /* end for (j=0;...) */ } /* end else (result>0) */ } /* end while */ + printf("Test Complete. \n\n"); + return; } - diff --git a/src/iperf_tcp.c b/src/iperf_tcp.c index ebd95a3..d3c284e 100644 --- a/src/iperf_tcp.c +++ b/src/iperf_tcp.c @@ -113,7 +113,7 @@ iperf_tcp_recv(struct iperf_stream * sp) */ do { - printf("iperf_tcp_recv: Calling recv: expecting %d bytes \n", size); + //printf("iperf_tcp_recv: Calling recv: expecting %d bytes \n", size); result = recv(sp->socket, sp->buffer, size, MSG_WAITALL); } while (result == -1 && errno == EINTR); @@ -176,7 +176,7 @@ iperf_tcp_send(struct iperf_stream * sp) } //printf("iperf_tcp_send: state = %d \n", sp->settings->state); - sp->buffer[0] = sp->settings->state; + memcpy(sp->buffer, &(sp->settings->state), sizeof(int));; /* set read size based on message type */ switch (sp->settings->state) @@ -284,9 +284,10 @@ iperf_tcp_accept(struct iperf_test * test) FD_SET(peersock, &test->read_set); test->max_fd = (test->max_fd < peersock) ? peersock : test->max_fd; + //printf("iperf_tcp_accept: max_fd now set to: %d \n", test->max_fd ); sp->socket = peersock; - //printf("in iperf_tcp_accept: tcp_windowsize: %d \n", test->default_settings->socket_bufsize); + //printf("in iperf_tcp_accept: socket = %d, tcp_windowsize: %d \n", peersock, test->default_settings->socket_bufsize); iperf_init_stream(sp, test); iperf_add_stream(test, sp); diff --git a/src/main.c b/src/main.c index 1816c23..d5faf39 100644 --- a/src/main.c +++ b/src/main.c @@ -228,7 +228,7 @@ iperf_run(struct iperf_test * test) { iperf_run_server(test); sleep(1); - iperf_init_test(test); /* re-initialize everything */ + //iperf_init_test(test); /* re-initialize everything */ } return 0; case 'c': diff --git a/src/net.c b/src/net.c index 43c5523..f7f9786 100644 --- a/src/net.c +++ b/src/net.c @@ -64,6 +64,7 @@ netannounce(int proto, char *local, int port) struct sockaddr_in sa; /* XXX: implement binding to a local address rather than * */ + printf("in netannounce: port = %d \n", port); memset((void *) &sa, 0, sizeof sa); s = socket(AF_INET, proto, 0);