Главная страница
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.009 c
15-1206189724
Rouse_
2008-03-22 15:42
2008.05.04
Вакансия Delphi программист


2-1207633373
F@T@L_Err0r
2008-04-08 09:42
2008.05.04
Копирование папки


15-1206430830
tesseract
2008-03-25 10:40
2008.05.04
Стань бетатестером рекламной компании Intel и получи 5 баксов


15-1205868370
Ega23
2008-03-18 22:26
2008.05.04
А каким образом Delphi читает dfm?


2-1207365197
Крылатый
2008-04-05 07:13
2008.05.04
Доступ к локальной папке