Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.04;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
2-1207655460
molodoi
2008-04-08 15:51
2008.05.04
Проблема с динамическим добавлением полей


2-1207412150
Dr.Andrew
2008-04-05 20:15
2008.05.04
Почему не работает конструкция case of и как решить проблему?


2-1207499830
savyhinst
2008-04-06 20:37
2008.05.04
BPL


6-1185774105
Darth Avenger
2007-07-30 09:41
2008.05.04
Отправка письма с аттачем


15-1205998774
Loginov Dmitry
2008-03-20 10:39
2008.05.04
Глючит DeleteFile в WinXP