Sipsak opens a raw socket to listen to (any and all) ICMP messages. Every time an ICMP packet is received, the respective loop branch runs to read/parse the ICMP packet. This branch doesn't check for timeouts and won't terminate the loop. If no actual UDP response is ever received, and if there's enough ICMP traffic on the network so that select() never runs into a timeout, sipsak will continue to run forever and won't honour the requested timeout.
Can we have disabled RAW_SUPPORT by default while you have no time to have this properly fixed?
Otherwise sipsak is not really usable in real/heavy production due to randomly hanging.
With RAW_SUPPORT enabled, what happens is:
Sipsak opens a raw socket to listen to (any and all) ICMP messages. Every time an ICMP packet is received, the respective loop branch runs to read/parse the ICMP packet. This branch doesn't check for timeouts and won't terminate the loop. If no actual UDP response is ever received, and if there's enough ICMP traffic on the network so that select() never runs into a timeout, sipsak will continue to run forever and won't honour the requested timeout.