14.7. Сколько данных находится в очереди?

14.7. Сколько данных находится в очереди?

Иногда требуется узнать, сколько данных находится в очереди для чтения данного сокета, не считывая эти данные. Для этого имеется три способа.

1. Если нашей целью не является блокирование в ядре (поскольку мы можем выполнять другие задачи, пока данные для чтения еще не готовы), может использоваться неблокируемый ввод-вывод. Мы обсуждаем его в главе 16.

2. Если мы хотим проверить данные, но при этом оставить их в приемном буфере для считывания какой-либо другой частью процесса, мы можем использовать флаг MSG_PEEK (см. табл. 14.1). Если мы не уверены, что какие-либо данные готовы для чтения, мы можем объединить этот флаг с отключением блокировки для сокета или с флагом MSG_DONTWAIT.

Помните о том, что для потокового сокета количество данных в приемном буфере может изменяться между двумя последовательными вызовами функции recv. Например, предположим, что мы вызываем recv для сокета TCP, задавая буфер длиной 1024 и флаг MSG_PEEK, и возвращаемое значение равно 100. Если затем мы снова вызовем функцию recv, возможно, возвратится более 100 байт (мы задаем длину буфера больше 100), поскольку в промежутке между двумя нашими вызовами recv могли быть получены дополнительные данные.

А что произойдет в случае сокета UDP, когда в приемном буфере имеется дейтаграмма? При вызове recvfrom с флагом MSG_PEEK, за которым последует другой вызов без задания MSG_PEEK, возвращаемые значения обоих вызовов (размер дейтаграммы, ее содержимое и адрес отправителя) будут совпадать, даже если в приемный буфер сокета между двумя вызовами добавляются дополнительные дейтаграммы. (Мы считаем, конечно, что никакой другой процесс не использует тот же дескриптор и не осуществляет чтение из данного сокета в это же время.)

3. Некоторые реализации поддерживают команду FIONREAD функции ioctl. Третий аргумент функции ioctl — это указатель на целое число, а возвращаемое в этом целом числе значение — это текущее число байтов в приемном буфере сокета [128, с. 553]. Это значение является общим числом установленных в очередь байтов, которое для сокета UDP включает все дейтаграммы, установленные в очередь. Также помните о том, что значение, возвращаемое для сокета UDP, в Беркли-реализациях включает пространство, требуемое для структуры адреса сокета, содержащей IP-адрес отправителя и порт для каждой дейтаграммы (16 байт для IP4, 24 байта для IP6).

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Сколько стоит пиратство?

Из книги Журнал «Компьютерра» № 32 от 04 сентября 2007 года автора Журнал «Компьютерра»

Сколько стоит пиратство? Автор: Павел ПротасовВопрос о так называемом ущербе от пиратства является одной из важнейших частей агитации за лицензионный софт и одновременно частью другого, более общего – об оценке стоимости так называемой интеллектуальной собственности.


5.1. Что находится вне области рассмотрения CMM

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

5.1. Что находится вне области рассмотрения CMM Модель СММ не является панацеей [Brooks 87] и не включает в себя все вопросы, значимые для успешных проектов. Например, в настоящее время СММ не рассматривает опыт в конкретных предметных областях, не пропагандирует конкретных


2.2.3. Сколько брать «оперативки»

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

2.2.3. Сколько брать «оперативки» Для нормальной работы в Windows ХР сейчас хватает 512 Мб оперативной памяти. А вот Windows Vista требует уже не менее 1 Гб памяти для нормальной работы. Да и современные игры довольно требовательны именно к оперативной памяти (даже не к частоте


Урок 1 Что такое Интернет и где он находится

Из книги Популярный самоучитель работы в Интернете автора Кондратьев Геннадий Геннадьевич

Урок 1 Что такое Интернет и где он находится Есть только звездное небо над нами и нравственный закон внутри нас. Первое есть чаще. Иммануил Кант (дополнено почитателями)


Сколько надо времени?

Из книги Facebook: как найти 100 000 друзей для вашего бизнеса бесплатно автора Албитов Андрей

Сколько надо времени? Каждому хочется сделать большую и активную группу на Facebook как можно быстрее. Даже когда число друзей в нашей группе росло на 1500 человек в сутки, я считал, что это ужасно медленно! Чтобы вывести в лидеры среди компаний в России группу ESET NOD32 Russia, нашей


Сколько надо денег?

Из книги Ководство автора Лебедев Артём Андреевич

Сколько надо денег? Мне и моим коллегам удалось, не потратив ни копейки, создать две группы по 100 000 друзей. В нашей компании не было бюджета на Facebook, поэтому мы изначально искали способы, как набрать друзей без денег и без рекламы на Facebook или где-то еще. Вы не хуже нас и


§ 84. Сколько байтов в килобайте?

Из книги Наглядный самоучитель работы на нетбуке автора Сенкевич Г. Е.

§ 84. Сколько байтов в килобайте? Алиса. Меня зовут Алиса? Шалтай-Болтай. Какое глупое имя! Что оно значит? Алиса. Разве имя должно что-то значить? Шалтай-Болтай. Конечно, должно! Возьмем, к примеру, мое имя — оно выражает мою суть! Замечательную чудесную суть! А с таким именем,


Что находится внутри?

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Что находится внутри? Пока нетбук находится на гарантии, разбирать его не стоит. Лучше познакомимся с его внутренним устройством на картинках. Процессор обрабатывает информацию — это «мозг» компьютера.По производительности процессоры, которые устанавливают в нетбуки,


Сколько дисков в нетбуке?

Из книги Новый ум короля [О компьютерах, мышлении и законах физики] автора Пенроуз Роджер

Сколько дисков в нетбуке? Внутри нетбука всегда установлен один физический диск (винчестер или SSD). Строго говоря, на жестком диске можно создать несколько разделов (логических дисков), и каждый из них Windows будет считать самостоятельным диском. Однако производители обычно


Где находится панель управления?

Из книги Компьютерные террористы [Новейшие технологии на службе преступного мира] автора Ревяко Татьяна Ивановна

Где находится панель управления? Панель управления (англ. Control Panel) — неотъемлемая часть интерфейса Microsoft Windows. Она позволяет настраивать и обслуживать операционную систему, устранять ее неполадки. В Windows 7 практически к любой настройке проще всего обратиться именно через


Что находится в скриптах DDL?

Из книги автора

Что находится в скриптах DDL? Операторы SQLСкрипт DDL содержит один или более операторов SQL (CREATE, ALTER, DROP) для создания, изменения или удаления базы данных или любого другого объекта. Он может включать операторы DML, хотя рекомендуется использовать операторы DDL и DML в разных


Ошибка "объект находится в использовании"

Из книги автора

Ошибка "объект находится в использовании" Исключение "object is in use" (объект находится в использовании) заслуживает внимания в контексте применения ограничений ссылочной целостности, поскольку является постоянным источником огорчений для новичков. Firebird не позволяет


Находится ли база данных на физически локальном диске?

Из книги автора

Находится ли база данных на физически локальном диске? Файл базы данных не должен размещаться в файловой системе NFS, на назначенном или совместно используемом диске. Когда процесс ibserver обнаруживает такую ситуацию, он отказывает в соединении.Для исправления этой ситуации