1
1

more work on state cleanup: not yet done

Этот коммит содержится в:
Brian Tierney 2009-11-03 05:37:06 +00:00
родитель a36921c2dd
Коммит c27f38e5be
5 изменённых файлов: 36 добавлений и 19 удалений

Просмотреть файл

@ -290,6 +290,7 @@ iperf_new_test()
{ {
struct iperf_test *testp; struct iperf_test *testp;
printf("in iperf_new_test: reinit default settings \n");
testp = (struct iperf_test *) malloc(sizeof(struct iperf_test)); testp = (struct iperf_test *) malloc(sizeof(struct iperf_test));
if (!testp) if (!testp)
{ {
@ -526,7 +527,7 @@ iperf_reporter_callback(struct iperf_test * test)
struct iperf_stream *sp = test->streams; struct iperf_stream *sp = test->streams;
iperf_size_t bytes = 0; iperf_size_t bytes = 0;
double start_time, end_time; 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) 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; int i = 0;
struct iperf_stream *sp; struct iperf_stream *sp;
printf("in iperf_new_stream \n");
sp = (struct iperf_stream *) malloc(sizeof(struct iperf_stream)); sp = (struct iperf_stream *) malloc(sizeof(struct iperf_stream));
if (!sp) if (!sp)
{ {
@ -717,6 +719,7 @@ iperf_new_stream(struct iperf_test * testp)
} }
memset(sp, 0, sizeof(struct iperf_stream)); 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->buffer = (char *) malloc(testp->default_settings->blksize);
sp->settings = (struct iperf_settings *) malloc(sizeof(struct iperf_settings)); sp->settings = (struct iperf_settings *) malloc(sizeof(struct iperf_settings));
memcpy(sp->settings, testp->default_settings, sizeof(struct iperf_settings)); memcpy(sp->settings, testp->default_settings, sizeof(struct iperf_settings));

Просмотреть файл

@ -121,11 +121,13 @@ iperf_run_server(struct iperf_test * test)
int j, result, message; int j, result, message;
char *results_string = NULL; char *results_string = NULL;
printf("in iperf_run_server \n");
FD_ZERO(&test->read_set); FD_ZERO(&test->read_set);
FD_SET(test->listener_sock_tcp, &test->read_set); FD_SET(test->listener_sock_tcp, &test->read_set);
FD_SET(test->listener_sock_udp, &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; 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->num_streams = 0;
test->default_settings->state = TEST_RUNNING; test->default_settings->state = TEST_RUNNING;
@ -138,15 +140,15 @@ iperf_run_server(struct iperf_test * test)
tv.tv_usec = 0; tv.tv_usec = 0;
/* using select to check on multiple descriptors. */ /* 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); result = select(test->max_fd + 1, &test->temp_set, NULL, NULL, &tv);
if (result == 0) if (result == 0)
{ {
//printf("SERVER IDLE : %d sec\n", (int) tv.tv_sec); //printf("SERVER IDLE : %d sec\n", (int) tv.tv_sec);
continue; continue;
} else if (result < 0 && errno != EINTR) } 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); exit(0);
} else if (result > 0) } else if (result > 0)
{ {
@ -159,6 +161,7 @@ iperf_run_server(struct iperf_test * test)
test->accept(test); test->accept(test);
test->default_settings->state = TEST_RUNNING; test->default_settings->state = TEST_RUNNING;
FD_CLR(test->listener_sock_tcp, &test->temp_set); FD_CLR(test->listener_sock_tcp, &test->temp_set);
printf("iperf_run_server: accepted TCP connection \n");
} }
/* Accept a new UDP connection */ /* Accept a new UDP connection */
else if (FD_ISSET(test->listener_sock_udp, &test->temp_set)) 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 */ /* find the correct stream - possibly time consuming */
np = find_stream_by_socket(test, j); np = find_stream_by_socket(test, j);
message = np->rcv(np); /* get data from client using receiver callback */ message = np->rcv(np); /* get data from client using
//printf ("iperf_run_server: iperf_tcp_recv returned %d \n", message); * 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; np->settings->state = message;
if (message == PARAM_EXCHANGE) if (message == PARAM_EXCHANGE)
@ -186,7 +196,8 @@ iperf_run_server(struct iperf_test * test)
/* copy the received settings into test */ /* copy the received settings into test */
memcpy(test->default_settings, test->streams->settings, sizeof(struct iperf_settings)); 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); close(np->socket);
@ -221,24 +232,25 @@ iperf_run_server(struct iperf_test * test)
do do
{ {
sp = np; sp = np;
printf(" closing socket: %d \n", sp->socket); //printf(" closing socket: %d \n", sp->socket);
close(sp->socket); close(sp->socket);
//FD_CLR(sp->socket, &test->read_set); FD_CLR(sp->socket, &test->read_set);
np = sp->next; /* get next pointer before freeing */ np = sp->next; /* get next pointer before
* freeing */
iperf_free_stream(sp); iperf_free_stream(sp);
} while (np != NULL); } while (np != NULL);
printf("TEST_END\n\n");
test->default_settings->state = TEST_END; 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); 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 if (FD_ISSET(j, &temp_set)) */
} /* end for (j=0;...) */ } /* end for (j=0;...) */
} /* end else (result>0) */ } /* end else (result>0) */
} /* end while */ } /* end while */
printf("Test Complete. \n\n");
return;
} }

Просмотреть файл

@ -113,7 +113,7 @@ iperf_tcp_recv(struct iperf_stream * sp)
*/ */
do 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); result = recv(sp->socket, sp->buffer, size, MSG_WAITALL);
} while (result == -1 && errno == EINTR); } 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); //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 */ /* set read size based on message type */
switch (sp->settings->state) switch (sp->settings->state)
@ -284,9 +284,10 @@ iperf_tcp_accept(struct iperf_test * test)
FD_SET(peersock, &test->read_set); FD_SET(peersock, &test->read_set);
test->max_fd = (test->max_fd < peersock) ? peersock : test->max_fd; 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; 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_init_stream(sp, test);
iperf_add_stream(test, sp); iperf_add_stream(test, sp);

Просмотреть файл

@ -228,7 +228,7 @@ iperf_run(struct iperf_test * test)
{ {
iperf_run_server(test); iperf_run_server(test);
sleep(1); sleep(1);
iperf_init_test(test); /* re-initialize everything */ //iperf_init_test(test); /* re-initialize everything */
} }
return 0; return 0;
case 'c': case 'c':

Просмотреть файл

@ -64,6 +64,7 @@ netannounce(int proto, char *local, int port)
struct sockaddr_in sa; struct sockaddr_in sa;
/* XXX: implement binding to a local address rather than * */ /* XXX: implement binding to a local address rather than * */
printf("in netannounce: port = %d \n", port);
memset((void *) &sa, 0, sizeof sa); memset((void *) &sa, 0, sizeof sa);
s = socket(AF_INET, proto, 0); s = socket(AF_INET, proto, 0);