-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
Summary
When running iperf3 in UDP bidirectional mode (--bidir) with a Cygwin-built iperf3 as the server, the server fails to create the reverse UDP stream, causing the test to fail immediately. The same Cygwin binary works correctly as a client.
Server (Cygwin/Windows) - FAILS:
iperf 3.19.1
CYGWIN_NT-10.0-22631 3.6.4-1.x86_64 / 3.6.5-1.x86_64
Windows 10/11 x86_64
Source: https://iperf.fr/iperf-download.php#windows
Client (Linux):
iperf 3.19.1
Linux 6.17.4+ aarch64
Steps to Reproduce
On Cygwin/Windows (server):
bash:
iperf3 -s -V -d
On Linux (client):
bash:
iperf3 -c -u -b 9M -t 10 --bidir
Expected Behavior
Server creates two UDP streams (one for each direction) and completes the bidirectional test.
Actual Behavior
Server creates only one stream, then immediately transitions to IPERF_DONE state. Client fails with:
iperf3: error - unable to read from stream socket: Resource temporarily unavailable
Debug Output
Cygwin Server (-V -d):
iperf 3.19.1
CYGWIN_NT-10.0-22631 3.6.4-1.x86_64
Server listening on 5201 (test #1)
State change: State set to 9-PARAM_EXCHANGE
get_parameters:
{
"udp": true,
"omit": 0,
"time": 10,
"parallel": 1,
"bidirectional": true,
"len": 1448,
"bandwidth": 9000000,
"client_version": "3.19.1"
}
State change: State set to 10-CREATE_STREAMS
Accepted connection from 165.26.78.71, port 48374
Cookie: xmsg262jb2uxg2ipjmuymtbqe6qpngqeicmt
Target Bitrate: 9000000
SNDBUF is 65536, expecting 0
RCVBUF is 65536, expecting 0
Setting application pacing to 1125000
[ 5] local 165.26.78.67 port 5201 connected to 165.26.78.71 port 35471
Reading new State from the Client - current state is 10-CREATE_STREAMS
State change: server received and changed State to 16-IPERF_DONE ← BUG: Only 1 stream created
All threads stopped
Linux Client:
Connecting to host 165.26.78.67, port 5201
[ 5] local 165.26.78.71 port 35471 connected to 165.26.78.67 port 5201
iperf3: error - unable to read from stream socket: Resource temporarily unavailable
Same Binary Works as Client
When roles are swapped (Linux=server, Cygwin=client), the same Cygwin binary works perfectly:
Linux Server:
iperf 3.19.1
Linux T7RX-DV 6.17.4+ aarch64
Server listening on 5201 (test #1)
[ 5] local 165.26.78.71 port 5201 connected to 165.26.78.67 port 54250
[ 6] local 165.26.78.71 port 5201 connected to 165.26.78.67 port 54251 ← Both streams created
Starting Test: protocol: UDP, 1 streams, 1460 byte blocks...
[ ID][Role] Interval Transfer Bitrate Jitter Lost/Total
[ 5][RX-S] 0.00-10.02 sec 10.7 MBytes 8.99 Mbits/sec 0.147 ms 0/7710 (0%)
[ 6][TX-S] 0.00-10.02 sec 10.7 MBytes 9.00 Mbits/sec 0/7720 (0%)
Cygwin Client:
Connecting to host 165.26.78.71, port 5201
[ 5] local 165.26.78.67 port 54250 connected to 165.26.78.71 port 5201
[ 7] local 165.26.78.67 port 54251 connected to 165.26.78.71 port 5201
...
[ 5][TX-C] 0.00-10.02 sec 10.7 MBytes 8.99 Mbits/sec 0/7710 (0%) sender
[ 7][RX-C] 0.00-10.02 sec 10.7 MBytes 9.00 Mbits/sec 0/7719 (0%) receiver
iperf Done.