After about 20 calls, the Via port generated by SIPp becomes '0'. I've traced it down to a scenario where connect_socket_if_needed returns because there is an existing socket.
Fix: add a local_port member to sipp_socket, initialize it upon bind, and update call_port with it when an existing socket is found
The ':0' Via port happens after -max_socket calls, which in my case was set to 20 ( while I had more than 20 open calls due to a 30s delay before BYE, and 1 cps )