diff --git a/src/iperf3.1 b/src/iperf3.1 index a9fe8e9..a7e67e6 100644 --- a/src/iperf3.1 +++ b/src/iperf3.1 @@ -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) diff --git a/src/iperf_locale.c b/src/iperf_locale.c index 91bacc4..354906f 100644 --- a/src/iperf_locale.c +++ b/src/iperf_locale.c @@ -132,7 +132,7 @@ const char usage_longstr[] = "Usage: iperf [-s|-c host] [options]\n" " --cport 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 set TCP congestion control algorithm (Linux and FreeBSD only)\n" #endif /* HAVE_TCP_CONGESTION */ diff --git a/src/iperf_udp.c b/src/iperf_udp.c index 0f55226..8d32dbe 100644 --- a/src/iperf_udp.c +++ b/src/iperf_udp.c @@ -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.