Re: send() и неблокирующий режим
От: Guardian76  
Дата: 15.05.03 06:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как убедиться, что send() доставил данные получателю при работе в неблокирующем режиме?

А>Вызываю send() — возвращает ОК(все отправлено). выдергиваю сетевой шнур, снова send() — ОК и только через некоторое время TCP сообщает, что коннект разорван. Но как узнать, что дошло до получателя, а что нет (какие send были ДЕЙСТВИТЕЛЬНО успешны)?
А>Заранее благодарю.


Все дело в буферизации. Так в windows 2000 можно отправить до 1 MB данных и Send вернет OK даже если клиент еще и не начал получать. Это сделано для ускрония работы стека в целом ( более подробно следует прочитать про механизм медленного старта и т.п. ). Таким образом без ответа от клиента действительно нельзя быть увереным что данные получены. TCP лишь гарантирует целостность пакетов и то что они придут в правильном порядке. Реализововать на UDP самому это не так то просто.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.