UDP and IPv6 iperf3 fails with "unable to accept stream connection: Invalid argument" error
Context
- Version of iperf3:
iperf 3.17.1 (cJSON 1.7.15)
Linux testbed-1 6.11.11 #1 SMP Thu Dec 12 17:55:41 UTC 2024 armv7l
Optional features available: CPU affinity setting, IPv6 flow label, TCP congestion algorithm setting, sendfile / zerocopy, socket pacing, authentication, bind to device, support IPv4 don't fragment, POSIX threads
-
Hardware: armv7l GNU/Linux
-
Operating system (and distribution, if any): Linux (Buildroot)
Bug Report
-
Expected Behavior Should be possible to run an iperf3 test in UDP on a IPv6 address.
-
Actual Behavior
$ iperf3 -c fe80::aabb:ccff:fedd:eeff%wifi0 -u -b 30M -V
iperf 3.17.1
Linux testbed-1 6.11.11 #1 SMP Thu Dec 12 17:55:41 UTC 2024 armv7l
Control connection MSS 1428
Setting UDP block size to 1428
Time: Fri, 13 Dec 2024 14:09:13 UTC
Connecting to host fe80::aabb:ccff:fedd:eeff%wifi0, port 5201
Cookie: zqym5vfwatgl5kei56tgxsz34s7dn72mcl6a
Target Bitrate: 30000000
iperf3: error - unable to read from stream socket: Resource temporarily unavailable
- Steps to Reproduce
- Get Ipv6 of target host (here, for the wifi0 interface):
$ ip -6 a show wifi0
5: wifi0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet6 fe80::aabb:ccff:fedd:eeff/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
- Run an iperf3 server in the target host:
iperf3 -s - From the client host, try to start an UDP iperf3 test using the IPv6 of the target host (and the client output network interface, here, it is also wifi0) :
$ iperf3 -c fe80::aabb:ccff:fedd:eeff%wifi0 -u -b 30M -V
iperf 3.17.1
Linux testbed-1 6.11.11 #1 SMP Thu Dec 12 17:55:41 UTC 2024 armv7l
Control connection MSS 1428
Setting UDP block size to 1428
Time: Fri, 13 Dec 2024 14:09:13 UTC
Connecting to host fe80::aabb:ccff:fedd:eeff%wifi0, port 5201
Cookie: zqym5vfwatgl5kei56tgxsz34s7dn72mcl6a
Target Bitrate: 30000000
iperf3: error - unable to read from stream socket: Resource temporarily unavailable
- Possible Solution It works if the test is done using an IPv4 address of the target host or in TCP. It is the combination of UDP and IPv6 that fails to work.
"Resource temporarily unavailable (EAGAIN)" usually means that the read should be retried. I created a branch in my private iperf3 fork that changes the one try rcv() with Nread() that does such retries..
Can you build iperf3 for the Client from this branch, run the client using this version and see if the problem is fixed? (If you don't know how to build iperf3 from the branch, I can send you instructions.) If it is not fixed, please run the Client using --debug=3 and send the output for further analysis.