Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.989 c
2-1207419208
AndrewG
2008-04-05 22:13
2008.05.04
Копирование


15-1205930041
Elec3C
2008-03-19 15:34
2008.05.04
with в C++


15-1206163183
Л.Николай
2008-03-22 08:19
2008.05.04
ImageList с поддержкой 32 битных иконок


2-1207675052
gefest80
2008-04-08 21:17
2008.05.04
звук


2-1207470775
malyar
2008-04-06 12:32
2008.05.04
sql запросы без sql сервера




   Наверх