Make UDP tests honor the -w option for setting the socket buffer
size. This appears to be necessary on some long, high-bandwidth paths to get sane results, either by reducing packet loss or by somehow allowing the sending host of a test to go faster. Fixes #219.
This commit is contained in:
parent
d65986030a
commit
72ac83e7f2
@ -124,7 +124,7 @@ number of parallel client streams to run
|
||||
run in reverse mode (server sends, client receives)
|
||||
.TP
|
||||
.BR -w ", " --window " \fIn\fR[KM]"
|
||||
TCP window size / socket buffer size (this gets sent to the server and used on that side too)
|
||||
window size / socket buffer size (this gets sent to the server and used on that side too)
|
||||
.TP
|
||||
.BR -M ", " --set-mss " \fIn\fR"
|
||||
set TCP maximum segment size (MTU - 40 bytes)
|
||||
|
@ -132,7 +132,7 @@ const char usage_longstr[] = "Usage: iperf [-s|-c host] [options]\n"
|
||||
" --cport <port> bind to a specific client port (TCP and UDP, default: ephemeral port)\n"
|
||||
" -P, --parallel # number of parallel client streams to run\n"
|
||||
" -R, --reverse run in reverse mode (server sends, client receives)\n"
|
||||
" -w, --window #[KMG] TCP window size (socket buffer size)\n"
|
||||
" -w, --window #[KMG] set window size / socket buffer size\n"
|
||||
#if defined(HAVE_TCP_CONGESTION)
|
||||
" -C, --congestion <algo> set TCP congestion control algorithm (Linux and FreeBSD only)\n"
|
||||
#endif /* HAVE_TCP_CONGESTION */
|
||||
|
@ -228,6 +228,22 @@ iperf_udp_accept(struct iperf_test *test)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set socket buffer size if requested. Do this for both sending and
|
||||
* receiving so that we can cover both normal and --reverse operation.
|
||||
*/
|
||||
int opt;
|
||||
if ((opt = test->settings->socket_bufsize)) {
|
||||
if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt)) < 0) {
|
||||
i_errno = IESETBUF;
|
||||
return -1;
|
||||
}
|
||||
if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(opt)) < 0) {
|
||||
i_errno = IESETBUF;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a new "listening" socket to replace the one we were using before.
|
||||
*/
|
||||
@ -291,6 +307,22 @@ iperf_udp_connect(struct iperf_test *test)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set socket buffer size if requested. Do this for both sending and
|
||||
* receiving so that we can cover both normal and --reverse operation.
|
||||
*/
|
||||
int opt;
|
||||
if ((opt = test->settings->socket_bufsize)) {
|
||||
if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(opt)) < 0) {
|
||||
i_errno = IESETBUF;
|
||||
return -1;
|
||||
}
|
||||
if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(opt)) < 0) {
|
||||
i_errno = IESETBUF;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Write a datagram to the UDP stream to let the server know we're here.
|
||||
* The server learns our address by obtaining its peer's address.
|
||||
|
Loading…
Reference in New Issue
Block a user