Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
2-1206949920
FishNode
2008-03-31 11:52
2008.05.04
Замена элемента TList


15-1205931726
@!!ex
2008-03-19 16:02
2008.05.04
Аналог property в C++


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


2-1207486169
dumka
2008-04-06 16:49
2008.05.04
Канва


3-1196447499
wipr
2007-11-30 21:31
2008.05.04
нет стабильной работы в InterBase по Wi-Fi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский