Форум: "Сети";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
ВнизReceiveLength Найти похожие ветки
← →
VeryVeryLongInteger (2007-08-01 12:03) [0]Возьмем к примеру TCustomWinSocket. Не понимаю зачем нужно ReceiveLength, т.е. что это такое, ведь как я понимаю достоверно нельзя понять сколько пришло данных пока не сделаешь fact := Socket.ReceiveBuf(... где fact - фактическое принятое количество данных.
Вопрос такой, что это такое ReceiveLength, зачем оно нужно и что оно может содержать и где используется.
Спасибо.
← →
Сергей М. © (2007-08-01 12:14) [1]
> Не понимаю зачем нужно ReceiveLength
И правильно не понимаешь)
В подавляющем большинстве алгоритмических решений этот метод нафих не нужен к применению.
> зачем оно нужно
Как правило, чтобы распределить буферную память заведомо достаточного размера.
> где используется
Вызов своего метода ReceiveLength объект TCustomWinSocket нигде не осуществляет.
← →
VeryVeryLongInteger (2007-08-01 12:27) [2]А каким тогда образом он определяет размер заведомо принятых данных? Этот размер будет всегда больше (или равен) фактических значений?
← →
Сергей М. © (2007-08-01 12:52) [3]
> А каким тогда образом он определяет размер заведомо принятых
> данных?
А никаким.
"Заведомо принятые данные" - это queued-данные. т.е. те данные, которые возвращает Receive-методы объекта
Ф-ция ioctlsocket, вызванная с параметром FIONREAD, не оперирует queued-данными в силу особенностей реализации WSP.
Т.е. поведение ioctlsocket провайдер-зависимо.
Подтверждение тому находим в справке к WSAIoctl (FIONREAD):
If s is stream oriented (for example, type SOCK_STREAM), FIONREAD returns the total amount of data which may be read in a single receive operation; this is normally the same as the total amount of data queued on the socket
Заметь - normally, А не always. По-русски это следует расценивать как "обычно это так, но вовсе не обязательно что это будет именно так не иначе".
Ну а раз "обычно", то и полагаться на то, что ReceiveBuf(ReceiveLength) вернет в точности "заказанный" объем данных, нет никаких оснований.
← →
Сергей М. © (2007-08-01 12:53) [4]
> Этот размер будет всегда больше (или равен) фактических
> значений?
Да, в соответствии с док-цией к WSA это именно так.
← →
Сергей М. © (2007-08-01 13:03) [5]
> Этот размер будет всегда больше (или равен) фактических
> > значений?
>
>
При условии что последующий recv в идеале будет вызван мгновенно сразу после ioctlsocket
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.03 c