sock: better management of RO connection when a message is lost or received out of order
To avoid extra traffic, the following is implemented:
- When the receiver receives a seq that is not the next expected, i send a direct (not queued) NACK (i do not care if sending the NACK fails or go through)
- The sender, when getting a NACK checks if the message has been acked meanwhile and if not, resend (once again with a direct send, not queuing).
- If the receiver receives twice the same seq, only the second message is just ignored
- If the NACK never make it through, i get a send timeout and we try to resend (it kills performance but they already drop with a NACK).