more work on state cleanup: not yet done
Этот коммит содержится в:
родитель
a36921c2dd
Коммит
c27f38e5be
@ -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));
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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':
|
||||
|
@ -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);
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user