By default, the -B <addr> flag binds the client socket to the local address (addr) passed in with the parameter, and the default (destination) port, typically 5001. If the client uses a -P <#threads> flag as well as the -B <addr> flag, all corresponding #threads sockets are being bound to the same (addr, 5001) tuple, which clearly fails (in particular with the message: bind failed: Address already in use).
I attached a patch that fixes this, however this revealed a more intricate problem if the -d flag is used at the same time (irrespective of the -L flag). In my configuration, both "iperf -B spath-left-0 -c spath-right-0 -P 2 -d -L 2001" and "iperf -B spath-left-0 -c spath-right-0 -P 2 -d" fail even with the patch applied.
Cheers,
Tudor
File Added: iperf-P-B.patch
File Added: iperf.patch