[tcp] Можно ли получить от OS подтверждение
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 27.04.09 18:18
Оценка:
Доброго дня!

Хочу попросить помощи у гуру сетевого программирования. Ситуация следующая. Приложение через TCP/IP (IPv4, если это имеет значение) общается с удаленным узлом. Через write в неблокирующий сокет записывается порция данных. Можно ли узнать от операционной системы, получил ли сетевой уровень TCP-подтверждение на пакет, который содержал эту порцию данных? (OS: Windows (XP, 2000, 2003) и Linux 2.4.16).

Насколько я понимаю, дело происходит так:
— приложение вызывает write;
— OS помещает данные из буфера, переданного в write, во внутренний буфер сокета;
— сетевой уровень OS сам берет данные из буфера сокета и формирует TCP-пакеты и IP датаграмы, после чего передает их канальному уровню;
— сетевой уровень OS сам отслеживает ответные IP датаграммы и TCP-пакеты, которые поступают из канального уровня;
— сетевой уровень сам обрабатывает положительные и отрицательные ответы удаленной сторны. И, при необходимости, выполняет перепосылку неподтвержденных данных. Точно так же сетевой уровень OS сам решает, нужно ли перепосылать данные при неполучении ответов.

Т.е. никакого информирования приложения о том, что происходит на сетевом уровне (т.е. в какие датаграммы были помещены данные приложения, какие подтвержения приходят на эти датаграммы) нет в принципе. Если только приложение само не реализует TCP-протокол.

Или же есть какие-то способы?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.