Re: проблема у recv() та же что и у send()?
От: Vlost Россия  
Дата: 27.11.03 12:08
Оценка:
Здравствуйте, EWhite, Вы писали:

EW> В форуме нашел, что send() может вернуть число отличное от количества посылаемого, таким образом его нужно вызвать еще раз. А это не вызовет дублирующихся данных на приемнике (recv())?

EW> Проблема такая: send() отправляет несколько фрагментов данных, ну пусть по 15кБ ровно и завершающий пусть 7кБ. Функция возвращает точно отправленное количество данных. А вот на другой стороне recv() получает все полные фрагменты по 15 и далеко не полный последний (из 7 — всего 6кБ). То есть, часть данных получается просто не дошла. Правда ли не дошла? recv() возвращает другое число, чем отсылалось через send().
EW>Можно отправлять один(!) большой фрагмент (пусть 100кБ), но на recv() он опять будет не полный (70кБ). Это почему так?

EW>протокол TCP, дополнительных свойств не утсанавливалось (через setsockopt()).

EW>Спасибо.


send() возвращает отличное от посылаемого число байт очень редко ( почти никогда ), т.к. она просто корирует данные из буфера, в какой-то буфер ОС

recv() не всегда читает ровно столько сколько послал send(). При посылке больше какой-то константы ( не помню точно — 1500байт что-ли) эти данные отправляются в несколько пакетов. Если некоторые пакеты опаздали, то соединение пошлет запрос на повтор. И если ты в это время чиаешь то тебе отдадут тоько последние прочитанные данные, так что если читать точное число байт пиши свою функцию
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.