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).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Урок 1 Что такое Интернет и где он находится
Урок 1 Что такое Интернет и где он находится Есть только звездное небо над нами и нравственный закон внутри нас. Первое есть чаще. Иммануил Кант (дополнено почитателями)
Сколько надо времени?
Сколько надо времени? Каждому хочется сделать большую и активную группу на Facebook как можно быстрее. Даже когда число друзей в нашей группе росло на 1500 человек в сутки, я считал, что это ужасно медленно! Чтобы вывести в лидеры среди компаний в России группу ESET NOD32 Russia, нашей
Сколько надо денег?
Сколько надо денег? Мне и моим коллегам удалось, не потратив ни копейки, создать две группы по 100 000 друзей. В нашей компании не было бюджета на Facebook, поэтому мы изначально искали способы, как набрать друзей без денег и без рекламы на Facebook или где-то еще. Вы не хуже нас и
§ 84. Сколько байтов в килобайте?
§ 84. Сколько байтов в килобайте? Алиса. Меня зовут Алиса? Шалтай-Болтай. Какое глупое имя! Что оно значит? Алиса. Разве имя должно что-то значить? Шалтай-Болтай. Конечно, должно! Возьмем, к примеру, мое имя — оно выражает мою суть! Замечательную чудесную суть! А с таким именем,
5.1. Что находится вне области рассмотрения CMM
5.1. Что находится вне области рассмотрения CMM Модель СММ не является панацеей [Brooks 87] и не включает в себя все вопросы, значимые для успешных проектов. Например, в настоящее время СММ не рассматривает опыт в конкретных предметных областях, не пропагандирует конкретных
Что находится в скриптах DDL?
Что находится в скриптах DDL? Операторы SQLСкрипт DDL содержит один или более операторов SQL (CREATE, ALTER, DROP) для создания, изменения или удаления базы данных или любого другого объекта. Он может включать операторы DML, хотя рекомендуется использовать операторы DDL и DML в разных
Ошибка "объект находится в использовании"
Ошибка "объект находится в использовании" Исключение "object is in use" (объект находится в использовании) заслуживает внимания в контексте применения ограничений ссылочной целостности, поскольку является постоянным источником огорчений для новичков. Firebird не позволяет
Находится ли база данных на физически локальном диске?
Находится ли база данных на физически локальном диске? Файл базы данных не должен размещаться в файловой системе NFS, на назначенном или совместно используемом диске. Когда процесс ibserver обнаруживает такую ситуацию, он отказывает в соединении.Для исправления этой ситуации
Сколько стоит пиратство?
Сколько стоит пиратство? Автор: Павел ПротасовВопрос о так называемом ущербе от пиратства является одной из важнейших частей агитации за лицензионный софт и одновременно частью другого, более общего – об оценке стоимости так называемой интеллектуальной собственности.
Что находится внутри?
Что находится внутри? Пока нетбук находится на гарантии, разбирать его не стоит. Лучше познакомимся с его внутренним устройством на картинках. Процессор обрабатывает информацию — это «мозг» компьютера.По производительности процессоры, которые устанавливают в нетбуки,
Сколько дисков в нетбуке?
Сколько дисков в нетбуке? Внутри нетбука всегда установлен один физический диск (винчестер или SSD). Строго говоря, на жестком диске можно создать несколько разделов (логических дисков), и каждый из них Windows будет считать самостоятельным диском. Однако производители обычно
Где находится панель управления?
Где находится панель управления? Панель управления (англ. Control Panel) — неотъемлемая часть интерфейса Microsoft Windows. Она позволяет настраивать и обслуживать операционную систему, устранять ее неполадки. В Windows 7 практически к любой настройке проще всего обратиться именно через
2.2.3. Сколько брать «оперативки»
2.2.3. Сколько брать «оперативки» Для нормальной работы в Windows ХР сейчас хватает 512 Мб оперативной памяти. А вот Windows Vista требует уже не менее 1 Гб памяти для нормальной работы. Да и современные игры довольно требовательны именно к оперативной памяти (даже не к частоте