Мне нужно выполнить трехстороннюю остановку и дождаться рукопожатия между клиентскими и серверными приложениями, написанными на c ++ (с winsock 2) для назначения.Клиент отправляет SYN.Сервер увеличивает порядковый номер клиента и отправляет SYN-ACK.Клиент увеличивает порядковый номер сервера и отправляет ACK.
Для имитации потери пакетов клиент и сервер подключены к промежуточной программе Router, которая иногда не пересылает пакеты, что приводит к потере.Как мне структурировать операторы sendto (), select (), recvfrom () для учета возможной потери пакетов?
Например, если SYN потерян и время ожидания клиента истекло, отправьте его повторно.Если SYN-ACK потерян, клиент истекает и отправляет SYN.Я понятия не имею, что делать, если ACK потерян все же.
Редактировать: На моем клиенте это выглядит так:
- Отправка SYN.
- Цикл, в то время как оператор select () завершается неудачно и повторно отправляет SYN
- Получает SYN-ACK
- Отправляет ACK
- Цикл для возможного повторного получения SYN-ACK, еслиACK был потерян.
Как узнать, когда прекратить зацикливание?