Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> recvfrom(UDP) и MSG_WAITALL.Вопрос. 
:(
    Опции темы
nic1986
Дата 12.12.2015, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.7.2009

Репутация: нет
Всего: 1



Если размер датаграммы меньше длины приемного буфера, то recvfrom её считает в буфер,если он был вызван с флагом MSG_WAITALL ? Или он тупо будет ждать пока буфер сокета заполниться до нужного обьема?
например:
1.выставить размер буфера сокета 64к
2.вызвать recvfrom с MSG_WAITALL,с len буфера тоже 64к
3.приходит датаграмма 16к
recvfrom будет ждать пока придет еще 3 по 16к , или он считает те 16к и завершиться?
    
PM MAIL   Вверх
feodorv
Дата 12.12.2015, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(nic1986 @  12.12.2015,  00:57 Найти цитируемый пост)
MSG_WAITALL

Просто сходу:
Цитата
MSG_WAITALL - This flag is not supported on datagram sockets or message-oriented sockets.
А чего, собственно, Вы хотите добиться? 

Максимальный размер датаграммы естественным образом ограничен:
Цитата
Поле, задающее длину всей датаграммы (заголовка и данных) в байтах. Минимальная длина равна длине заголовка — 8 байт. Теоретически, максимальный размер поля — 65535 байт для UDP-датаграммы (8 байт на заголовок и 65527 на данные). Фактический предел для длины данных при использовании IPv4 — 65507 (помимо 8 байт на UDP-заголовок требуется ещё 20 на IP-заголовок).
Поэтому отослать более 64K в датаграмме у Вас не получится.

Более того, датаграмма принимается и передаётся пользователю исключительно целиком. Если recvfrom отработал без ошибок и принял 16K (при большем заданном размере пользовательского буфера), то это значит, что датаграмма именно такого размера и была послана. Две датаграммы за один вызов recvfrom получить нельзя.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
nic1986
Дата 12.12.2015, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.7.2009

Репутация: нет
Всего: 1



Цитата(feodorv @  12.12.2015,  12:31 Найти цитируемый пост)
Более того, датаграмма принимается и передаётся пользователю исключительно целиком. Если recvfrom отработал без ошибок и принял 16K (при большем заданном размере пользовательского буфера), то это значит, что датаграмма именно такого размера и была послана. Две датаграммы за один вызов recvfrom получить нельзя. 

Спасибо, это и хотел узнать. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1007 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.