more work on state cleanup: not yet done

This commit is contained in:
Brian Tierney 2009-11-03 05:37:06 +00:00
parent a36921c2dd
commit c27f38e5be
5 changed files with 36 additions and 19 deletions

View File

@ -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));

View File

@ -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;
}

View File

@ -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);

View File

@ -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':

View File

@ -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);