added new field listener_port in iperf_api.h, changed udp_Accept() port assignment in iperf_api.c

This commit is contained in:
kaustubhprabhu 2009-06-15 19:43:52 +00:00
parent d1dc4db8c2
commit ba492bef36
2 changed files with 44 additions and 37 deletions

View File

@ -192,7 +192,7 @@ void iperf_defaults(struct iperf_test *testp)
{
testp->protocol = Ptcp;
testp->role = 's';
testp->port = 5001;
testp->duration = 10;
testp->stats_interval = 0;
@ -217,7 +217,7 @@ void iperf_init_test(struct iperf_test *test)
if(test->role == 's')
{
test->listener_sock = netannounce(test->protocol, NULL, ntohs(((struct sockaddr_in *)(test->local_addr))->sin_port));
test->listener_sock = netannounce(test->protocol, NULL, test->listener_port);
if( test->listener_sock < 0)
exit(0);
@ -284,6 +284,8 @@ void iperf_free_test(struct iperf_test *test)
free(test);
}
/* TODO */
void iperf_free_stream(struct iperf_test *test, struct iperf_stream *sp)
{
free(sp->settings);
@ -374,18 +376,18 @@ int iperf_udp_accept(struct iperf_test *test)
struct sockaddr_in sa_peer;
char *buf;
socklen_t len;
int sz, s;
buf = (char *) malloc(test->default_settings->bufsize);
int sz;
buf = (char *) malloc(test->default_settings->bufsize);
sp = test->new_stream(test);
len = sizeof sa_peer;
sz = recvfrom(test->listener_sock, buf, test->default_settings->bufsize, 0, (struct sockaddr *) &sa_peer, &len);
if(!sz)
return -1;
if(connect(test->listener_sock, (struct sockaddr *) &sa_peer, len) < 0)
@ -394,18 +396,21 @@ int iperf_udp_accept(struct iperf_test *test)
return -1;
}
sp->socket = test->listener_sock;
iperf_init_stream(sp, test);
iperf_add_stream(test, sp);
printf(" stream added , socket = %d\n", sp->socket);
test->listener_sock = netannounce(test->protocol, NULL, ntohs(((struct sockaddr_in *)(test->local_addr))->sin_port));
test->listener_sock = netannounce(test->protocol, NULL, test->listener_port);
if(test->listener_sock < 0)
return -1;
FD_SET(test->listener_sock, &(test->read_set));
test->max_fd = (test->max_fd < s)?s:test->max_fd;
printf(" in udp accept \n");
FD_SET(test->listener_sock, &(test->read_set));
test->max_fd = (test->max_fd < test->listener_sock)?test->listener_sock:test->max_fd;
return 0;
}
@ -605,38 +610,38 @@ void iperf_run_server(struct iperf_test *test)
Display(test);
}
}
// test end message ?
//result_request message ?
//Process the sockets for read operation
for (j=0; j< test->max_fd+1; j++)
{
if (FD_ISSET(j, &(test->temp_set)))
{
// find the correct stream
n = update_stream(test,j,0);
result = n->rcv(n);
if(result == 0)
{
// stream shutdown message
unit_snprintf(ubuf, UNIT_LEN, (double) (n->result->bytes_received / n->result->duration), 'a');
printf("%llu bytes received %s/sec for stream %d\n\n",n->result->bytes_received, ubuf,(int)n);
close(j);
free_stream(test, n);
FD_CLR(j, &(test->read_set));
}
else if(result < 0)
for (j=0; j< test->max_fd+1; j++)
{
if (FD_ISSET(j, &(test->temp_set)))
{
printf("Error in recv(): %s\n", strerror(errno));
}
} // end if (FD_ISSET(j, &temp_set))
// find the correct stream
n = update_stream(test,j,0);
result = n->rcv(n);
if(result == 0)
{
// stream shutdown message
unit_snprintf(ubuf, UNIT_LEN, (double) (n->result->bytes_received / n->result->duration), 'a');
printf("%llu bytes received %s/sec for stream %d\n\n",n->result->bytes_received, ubuf,(int)n);
close(j);
free_stream(test, n);
FD_CLR(j, &(test->read_set));
}
else if(result < 0)
{
printf("Error in recv(): %s\n", strerror(errno));
}
} // end if (FD_ISSET(j, &temp_set))
}// end for (j=0;...)
}// end for (j=0;...)
}// end else (result>0)
}// end while
}
@ -779,6 +784,7 @@ main(int argc, char **argv)
case 's':
test->role = 's';
addr_local->sin_port = htons(5001);
test->port = 5001;
break;
case 't':
test->duration = atoi(optarg);

View File

@ -57,12 +57,13 @@ struct iperf_test
{
char role; // 'c'lient or 's'erver -s / -c
int protocol;
struct sockaddr_storage *remote_addr; // arg of -c
struct sockaddr_storage *local_addr;
int duration; // total duration of test -t
int listener_sock;
int listener_port;
/* Select related parameters */
int max_fd;