У меня есть служба, которая прослушивает и использует TCP-сообщения.Недавно я наткнулся на устройство, которое отправляет TCP-сообщения, но вместо обычного завершения соединения, например, с помощью FIN, оно всегда завершает соединения с использованием RST, что на моем конце рассматривается как соединение, прерванное удаленным хостом, и данные вОчередь сокетов исчезла.
В ходе моего исследования я натолкнулся на различные мнения о том, является ли это допустимым / приемлемым, и сделал некоторые выводы о том, что приложения должны начинать принимать завершения через RST вместо FIN (или обоих).
Мой вопрос, как?Как только клиент отправляет пакет RST на мой сервер, я получаю сообщение об ошибке winsock 10054, в котором говорится, что удаленный хост прервал соединение.На уровне моего приложения я не видел никакого контроля над ним, поскольку я просто получаю ошибку в этой точке.
Это приводит к двум возможным прерывистым результатам в зависимости от времени: - Данные в очереди обрабатываютсяи затем соединение обрывается.- Соединение разрывается до того, как данные могут быть обработаны, и оно теряется.
Поэтому я пытаюсь сделать все, что в моих силах, чтобы эти пакеты RST не рассматривались как прерванные и обрабатывать данные, находящиеся вочередь последовательно.