Re[2]: как обработать TCP RST на уровне приложения
От: rnn  
Дата: 05.02.12 08:50
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, rnn, Вы писали:


rnn>>Существует следующая ситуация. Стороннее приложение, которое взаимодействует с моим, как я понимаю в какой то момент шлет TCP RST, но перед этим запросило нас выполнить определенное действие.


N>Мнэээ... вообще-то в протоколе TCP не предполагается посылки RST для существующего корректного соединения. RST посылается или при явной ошибке параметров, или для несуществующего соединения, или как грубое средство его порвать всякими промежуточными агентами (файрволлами, экранами, NATами и прочими). Нормальное закрытие соединения на передачу это посылка FIN, которая должна быть хорошо заметна, а закрытие на приём — это присылка ACK с нулевым окном. Думаю, тут у вас не ваш удалённый собеседник шлёт RST, а кто-то левый. Или же IP стек сделан с нарушением базовых принципов, такое редко, но бывает. Или же там не RST, но вы почему-то думаете, что RST.


Спасибо. На счет корректности завершения сессии и т.д. я прочитал. Но по логам явно видно, что идет RST, а уж почему оно идет, пока информации нет и на сколько это корректно тоже непонятно.

rnn>> Суть в том что стороннее приложение считает что послав TCP RST оно отменяет выполнение действия, но наше приложение работает с данными полученными по http протоколу и не может отслеживать tcp сессии(как я понимаю это вообще ложится на плечи вэб сервера). Вопрос в следующем, могу ли я как то в своем приложение обработать эту ситуацию и отменить действие по TCP RST событию?


N>Очевидно, если об этом не сообщили, то не можете. А как именно веб-сервер может сообщить об этом, пока идёт обработка запроса, зависит от этого сервера.


Т.е. получается мне надо читать доки по конкретному вэб серверу, который я использую и пытаться понять как он об этом сообщает? Какой то общей ситуации нет?

И еще, я так понимаю при передачи данных, происходит установления множества сессий, т.е. она не поддерживается на протяжение всего времени передачи данных по HTTP. Если так, то отследить для какой конкретно сессии пришел RST будет трудно. Я к тому что, мне же все это нужно соотнести с моими данными, полученными по HTTP и отменить их.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.