28.3. Вывод на символьном сокете

28.3. Вывод на символьном сокете

Вывод на символьном сокете регулируется следующими правилами:

1. Стандартный вывод выполняется путем вызова функции sendto или sendmsg и определения IP-адреса получателя. Функции write, writev и send также можно использовать, если сокет был присоединен.

2. Если не установлен параметр сокета IP_HDRINCL, то начальный адрес данных, предназначенных для записи ядром, указывает на первый байт, следующий за IP-заголовком, поскольку ядро будет строить IP-заголовок и добавлять его к началу данных из процесса. Ядро устанавливает поле протокола создаваемого заголовка IPv4 равным значению третьего аргумента функции socket.

3. Если параметр сокета IP_HDRINCL установлен, то начальный адрес данных, предназначенных для записи ядром, указывает на первый байт IP-заголовка. Размер данных для записи должен включать размер IP-заголовка вызывающего процесса. Процесс полностью формирует IP-заголовок, за исключением того, что, во-первых, значение поля идентификации IPv4 может быть нулевым (что указывает ядру на необходимость самостоятельно установить это значение), во-вторых, ядро всегда вычисляет и сохраняет контрольную сумму заголовка IPv4, в-третьих, включает или не включает параметры IP (см. раздел 27.2).

4. Ядро фрагментирует символьные пакеты, превышающие значение MTU исходящего интерфейса.

ПРИМЕЧАНИЕ

Согласно документации, символьные сокеты должны предоставлять протоколу такой же интерфейс, как если бы он был реализован в ядре [74]. К сожалению, это означает, что некоторые части интерфейса зависят от ядра операционной системы. В частности, это относится к порядку байтов полей заголовка IP. В Беркли-ядрах все поля имеют порядок байтов сети, за исключением полей ip_len и ip_off, имеющих порядок байтов узла [128, с. 233, с. 1057]. В системах Linux и OpenBSD все поля имеют порядок байтов сети.

Параметр сокета IP_HDRINCL впервые был представлен в системе 4.3BSD Reno. До этого приложение имело единственную возможность определить свой собственный IP- заголовок в пакетах, отсылаемых на символьный сокет, — использовать заплату ядра (kernel patch), которая была представлена в 1988 году Ван Якобсоном (Van Jacobson) для поддержки программы traceroute. Эта заплата позволяла приложению создавать символьный IP-сокет, определяя протокол как IPPROTO_RAW, что соответствовало значению 255 (это значение является зарезервированным и никогда не должно появляться в поле протокола IP-заголовка).

Функции, осуществляющие ввод-вывод на символьном сокете, являются одними из простейших функций в ядре. Например, в книге [128, с. 1054–1057] каждая такая функция занимает около 40 строк кода на языке С. Для сравнения: функция ввода TCP содержит около 2000 строк, а функция вывода TCP около 700 строк.

Приводимое в этой книге описание параметра сокета IP_HDRINCL относится к системе 4.4BSD. В более ранних версиях, таких как Net/2, при использовании данного параметра заполнялось большее количество полей заголовка IP.

В протоколе IPv4 пользовательский процесс отвечает за вычисление и установку контрольной суммы любого заголовка, следующего за заголовком IPv4. Например, в нашей программе ping (см. листинг 28.10), прежде чем вызывать функцию sendto, мы должны вычислить контрольную сумму ICMPv4 и сохранить ее в заголовке ICMPv4.

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

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

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

1.1.1 Вывод

Из книги C++ автора Хилл Мюррей

1.1.1 Вывод Прежде всего, давайте напишем программу, выводящую строку выдачи:#include «stream.h»main() (* cout «„ «Hello, world “; *)Строка #include «stream.h» сообщает компилятору, чтобы он включил стандартные возможности потока ввода и вывода, находящиеся в файле stream.h. Без этих описаний выражение cout


8.2 Вывод

Из книги Криптоанархия, кибергосударства и пиратские утопии автора Ладлоу Питер

8.2 Вывод В этом разделе сначала обсуждаются средства форматного и бесформатного вывода встроенных типов, потом приводится стадартный способ спецификации действий вывода для определяемых пользователем


Вывод

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Вывод Криптоанархия — это международная угроза, распространение которой стимулируется развитием систем коммуникаций, в том числе телефонии и Интернета. Чтобы бороться с этой угрозой, необходим интернациональный подход к обеспечению безопасности международных


Вывод в файл

Из книги ArchiCAD. Начали! автора Орлов Андрей Александрович

Вывод в файл Вывод в файл целесообразно применять, если проект предназначен для публикации в Интернете, а также если для его просмотра предполагают использовать исключительно компьютер или устройство с возможностями воспроизведения видеофайлов (к примеру, мобильные


Вывод на диск

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

Вывод на диск Pinnacle Studio можно использовать для вывода проекта в формате VCD, S-VCD, DVD, HD-DVD и AVCHV (Blu-ray). При этом Studio может записать видео сразу на диск, экономя пользователю время на работу с утилитами записи дисков. Видеокурс Как выводить видео на диск, показывается в видеоуроке


Вывод на принтер

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

Вывод на принтер С помощью команды File ? Print (Файл ? Печать) или комбинации клавиш Ctrl+P открывается окно настройки параметров распечатки документа (рис. 10.3). Рис. 10.3. Окно настройки параметров печатиВ данном окне расположены элементы управления печатью. Смысл их достаточно


Вывод текста

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Вывод текста Было бы странно, если канва не позволяла выводить произвольный текст. Существуют два метода и несколько свойств для вывода текста.Метод strokeText выводит заданный текст в указанное место. Текст рисуется в виде контура, без заливки; цвет контура задается


Вывод текста

Из книги Антимозг [Цифровые технологии и мозг] автора Шпитцер Манфред

Вывод текста Было бы странно, если канва не позволяла выводить произвольный текст. Существуют два метода и несколько свойств для вывода текста.Метод strokeText выводит заданный текст в указанное место. Текст рисуется в виде контура, без заливки; цвет контура задается


ВЫВОД СТРОК 

Из книги Linux Mint и его Cinnamon. Очерки применителя автора Федорчук Алексей Викторович

ВЫВОД СТРОК      Опять мы должны полагаться на библиотечные функции, которые могут немного изменяться от системы к системе. Функции puts( ) и printf( ) - две рабочие лошадки, используемые при выводе строк.


Вывод

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.

Вывод Деменция — это умственный упадок. Как каждый упадок, она протекает тем дольше, чем с большей высоты начинается падение. Для того чтобы всегда оставаться на высоте и не терять высокой умственной работоспособности, как и обычные мускулы, мозг необходимо тренировать.


Вывод

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

Вывод Компьютеры обрабатывают информацию. Люди, которые учатся — тоже. Из этого делается неверный вывод, что компьютеры — идеальные инструменты для обучения. Однако именно потому, что компьютеры, ноутбуки и смартборды делают умственную работу за нас, для обучения они не


Вывод

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

Вывод Тот, кто хранит плоды своего умственного труда на цифровых носителях или на «облаке» в Интернете, наряду с уменьшением непосредственной нагрузки на головной мозг получает еще одну проблему. У этого человека полностью исчезает мотивация для запоминания новой


Вывод

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

Вывод Виртуальные социальные сети удовлетворяют основную потребность человека, которая заключается в общении с окружающими нас людьми. Мы проводим много времени за разговорами и обсуждением всех известных нам людей, начиная с друзей и соседей и заканчивая сильными


Вывод

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

Вывод Удивительно, как международные концерны снова и снова умудряются водить за нос целые поколения людей во многих странах мира. Создаются телепередачи и видеодиски, рекламируется их положительное воздействие на детей (почти всегда речь идет об обучении) и их успешно


Ввод и вывод

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

Ввод и вывод Также мне кажется очень важным, чтобы мои результаты подпитывались соответствующим «вводом». Написание программного кода – творческая работа. Обычно мои творческие способности в наибольшей степени проявляются тогда, когда я сталкиваюсь с творческим