Здравствуйте, Аноним, Вы писали:
А>Как убедиться, что send() доставил данные получателю при работе в неблокирующем режиме? А>Вызываю send() — возвращает ОК(все отправлено). выдергиваю сетевой шнур, снова send() — ОК и только через некоторое время TCP сообщает, что коннект разорван. Но как узнать, что дошло до получателя, а что нет (какие send были ДЕЙСТВИТЕЛЬНО успешны)? А>Заранее благодарю.
Все дело в буферизации. Так в windows 2000 можно отправить до 1 MB данных и Send вернет OK даже если клиент еще и не начал получать. Это сделано для ускрония работы стека в целом ( более подробно следует прочитать про механизм медленного старта и т.п. ). Таким образом без ответа от клиента действительно нельзя быть увереным что данные получены. TCP лишь гарантирует целостность пакетов и то что они придут в правильном порядке. Реализововать на UDP самому это не так то просто.