jkorell/iperf

better error message when a iperf3 client tries to connect to an iperf2 server

Opened this issue · 7 comments

Currently if I start an iperf2 server, and try to connect to it with an iperf3 
client, it just hangs.

It should return an error saying "iperf version 3.x clients are not compatible 
with iperf 2.x servers. Please update your server."


Original issue reported on code.google.com by bltier...@es.net on 30 May 2013 at 11:21

Ok, so when an iperf3 client tries to connect to an iperf2 server, the client 
loops forever in iperf_run_client() waiting for a response.  I need to do a 
little more investigation to figure out if it's possible/reasonable to add a 
check in that loop for iperf2.

Original comment by jef.posk...@gmail.com on 3 Jun 2013 at 12:54

Hard to do. Will try in future release.


Original comment by bltier...@es.net on 23 Jul 2013 at 5:35

  • Added labels: Milestone-3.1a1
  • Removed labels: Milestone-3.0-Release

Original comment by bltier...@es.net on 18 Dec 2013 at 9:17

  • Added labels: Milestone-future
  • Removed labels: Milestone-3.1a1

Original comment by bltier...@es.net on 18 Dec 2013 at 10:40

  Iperf3 and iperf 2 works in a diff way and iperf3 control socket does not have TMO it just hangs on select waiting to for some response.

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(5001),
sin_addr=inet_addr("127.0.0.1")}, 16) = 0
write(3, "XXX.1387736273.832197.4c21154a48"..., 37) = 37
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 1689286}) = 0
getrusage(RUSAGE_SELF, {ru_utime={0, 0}, ru_stime={0, 1000}, ...}) = 0
select(4, [3], [], NULL, NULL <================ Iperf3 client hangs here ..


   Well to handle this scenario code also changes required  for iperf2 which I dont think really possible or is it ? This is not something we can control .   I do have some approches

1. Control socket Setting non-block
2. Control socket TMO






Original comment by susant%redhat.com@gtempaccount.com on 22 Dec 2013 at 6:27

Noting that iperf2 and iperf3 have different default ports (5001 vs. 5021), I 
think that this problem won't come up real often.

Original comment by bmah@es.net on 3 Feb 2014 at 10:50

In that case it should be doable to check if 5001 is open/iperf2 when iperf3 
gets a 'connection refused' on 5021.

I also (naively) assumed that iperf3 would be able to connect to an iperf2 
server, all i got was:

iperf3: error - unable to connect to server: Connection refused

would be helpful if it would mention the incompatibility.

Original comment by goo...@vanbragt.com on 12 Feb 2015 at 5:12