Приемный буфер сокета UDP
Приемный буфер сокета UDP
Число дейтаграмм UDP, установленных в очередь UDP, для данного сокета ограничено размером его приемного буфера. Мы можем изменить его с помощью параметра сокета SO_RCVBUF, как мы показали в разделе 7.5. В FreeBSD по умолчанию размер приемного буфера сокета UDP равен 42 080 байт, что допускает возможность хранения только 30 из наших 1400-байтовых дейтаграмм. Если мы увеличим размер приемного буфера сокета, то можем рассчитывать, что сервер получит дополнительные дейтаграммы. В листинге 8.12 представлена измененная функция dg_echo из листинга 8.10, которая увеличивает размер приемного буфера сокета до 240 Кбайт. Если мы запустим этот сервер в системе Sun, а клиент — в системе RS/6000, то счетчик полученных дейтаграмм будет иметь значение 103. Поскольку это лишь немногим лучше, чем в предыдущем примере с размером буфера, заданным по умолчанию, ясно, что мы пока не получили решения проблемы.
Листинг 8.12. Функция dg_echo, увеличивающая размер приемного буфера сокета
//udpcliserv/dgecholоор2.c
1 #include "unp.h"
2 static void recvfrom_int(int);
3 static int count;
4 void
5 dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)
6 {
7 int n;
8 socklen_t len;
9 char mesg[MAXLINE];
10 Signal(SIGINT, recvfrom_int);
11 n = 240 * 1024;
12 Setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n));
13 for (;;) {
14 len = clilen;
15 Recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
16 count++;
17 }
18 }
19 static void
20 recvfrom_int(int signo)
21 {
22 printf(" received %d datagrams ", count);
23 exit(0);
24 }
ПРИМЕЧАНИЕ
Почему мы устанавливаем размер буфера приема сокета равным 240?1024 байт в листинге 8.12? Максимальный размер приемного буфера сокета в BSD/OS 2.1 по умолчанию равен 262 144 байта (256?1024), но из-за способа размещения буфера в памяти (описанного в главе 2 [128]) он в действительности ограничен до 246 723 байт. Многие более ранние системы, основанные на 4.3BSD, ограничивали размер буфера приема сокета примерно до 52 000 байт.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Буфер сообщений ядра
Буфер сообщений ядра Сообщения ядра хранятся в кольцевом буфере (log buffer) размером LOG_BUF_LEN. Этот размер можно изменять во время компиляции с помощью параметра CONFIG_LOG_BUF_SHIFT. Для однопроцессорной машины это значение по умолчанию равно 16 Кбайт. Другими словами в ядре может
Буфер обмена
Буфер обмена Буфер обмена – это специальная область оперативной памяти компьютера, в которой хранятся данные, предназначенные для перемещения или копирования как между окнами разных приложений, так и в одном и том же окне.В любой программе при выполнении команды
ГЛАВА 3. БУФЕР СВЕРХОПЕРАТИВНОЙ ПАМЯТИ (КЕШ)
ГЛАВА 3. БУФЕР СВЕРХОПЕРАТИВНОЙ ПАМЯТИ (КЕШ) Как уже говорилось в предыдущей главе, ядро операционной системы поддерживает файлы на внешних запоминающих устройствах большой емкости, таких как диски, и позволяет процессам сохранять новую информацию или вызывать ранее
Буфер сетевых операций
Буфер сетевых операций Буфер сетевых операций используется для хранения сетевых команд и потоков. Увеличение размера буфера может повысить скорость передачи данных. Но следует учитывать, что память для буфера сетевых операций резервируется за счет оперативной памяти,
Буфер обмена
Буфер обмена Смотрим, что у нас есть в группе Буфер обмена (рис. 1.13). Рис. 1.13. Группа Буфер обмена Кнопка с ножницами отвечает за вырезание текста (ее дублирует сочетание клавиш Ctrl+X). Выделяем часть текста (например, первый абзац). Нажимаем кнопку с ножницами или Ctrl+X –
Буфер результатов слишком мал
Буфер результатов слишком мал Когда мы рассказывали о функции door_call, мы отметили, что если буфер результатов оказывается слишком мал, библиотека дверей осуществляет автоматическое выделение нового буфера. Сейчас мы покажем это на примере. В листинге 15.4 приведен текст
Виртуальный буфер кадров
Виртуальный буфер кадров После запуска визуализации на экране появится активное по умолчанию окно Rendered Frame Window (Окно кадров визуализации), отображающее процесс вывода изображения (рис. 6.5). Рис. 6.5. Окно Rendered Frame Window (Окно кадров визуализации)Панель инструментов,
3.4. Буфер обмена
3.4. Буфер обмена При вырезании или копировании содержимое ячейки помещается в буфер обмена и становится доступным не только для работы в Word. Аналогично вы можете вставить в документ Word текст или иные данные, скопированные из другого приложения, с интернет,страницы и др.
Совет 30. Следите за тем, чтобы приемный интервал имел достаточный размер
Совет 30. Следите за тем, чтобы приемный интервал имел достаточный размер Контейнеры STL автоматически увеличиваются с добавлением новых объектов (функциями insert, push_front, push_back и т. д.). Автоматическое изменение размеров чрезвычайно удобно, и у многих программистов создается
8.3. Виртуальный буфер кадров
8.3. Виртуальный буфер кадров После запуска визуализации на экране появится активное по умолчанию окно Rendered Frame Window (Окно кадров визуализации), отображающее процесс вывода изображения (рис. 8.5). Рис. 8.5. Окно Rendered Frame Window (Окно кадров визуализации)Панель инструментов,
Буфер обмена
Буфер обмена ChangeClipboardChain Функция ChangeClipboardChain удаляет указанное окно из цепочки просмотра буфера обмена. BOOL ChangeClipboardChain ( HWND hWndRemove , HWND hWndNewNext ); Параметры hWndRemove - дескриптор окна, которое будет удалено из цепочки. Дескриптор должен был быть передан в функцию SetClipboardViewer. hWndNewNext
Буфер обмена
Буфер обмена Просмотр буфера обмена Пример на основе простого модуля-класса, осуществляющего просмотр буфера обмена.unit ClipboardViewer;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(tform) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject);private FNextViewerHandle : THandle; procedure
Копирование в буфер обмена
Копирование в буфер обмена Две вспомогательных процедуры:procedure CopyButtonClick(Sender: TObject);begin If ActiveControl is TMemo then TMemo(ActiveControl).CopyToClipboard; If ActiveControl is TDBMemo then TDBMemo(ActiveControl).CopyToClipboard; If ActiveControl is TEdit then TEdit(ActiveControl).CopyToClipboard; If ActiveControl is TDBedit then TDBedit(ActiveControl).CopyToClipboard;end;procedure PasteButtonClick(Sender:
Буфер обмена и удаление
Буфер обмена и удаление Редактор титров поддерживает также операции с объектами с помощью буфера обмена Windows: копирование, вырезание и вставку. Данные операции применяются к объектам титров аналогично, как и к другим объектам, например к тексту в текстовом редакторе,
§ 3.5 Перенос через буфер обмена
§ 3.5 Перенос через буфер обмена Простой, но незаслуженно игнорируемый способ. Он, как нетрудно понять, заключается в выделении фрагмента текста, или же текста целиком, копировании его в буфер обмена Windows, и последующей вставке в FB Editor.Копирование через буфер обмена, как
Буфер обмена и команды для работы с ним
Буфер обмена и команды для работы с ним В Блокноте можно выделять, а затем копировать, перемещать или удалять фрагменты текста. Для работы с фрагментами используют буфер обмена – специальную область памяти, куда можно помещать выделенные объекты. Описанные действия с