Inetd и серверы RPC

Inetd и серверы RPC

По умолчанию серверы, созданные с помощью rpcgen, могут вызываться сервером верхнего уровня inetd. Этот сервер описывается в разделе 12.5 [24]. Изучение содержимого заглушки сервера, создаваемой rpcgen, показывает, что при запуске функции main сервера она проверяет, является ли стандартный поток ввода конечной точкой XTI, и если так, то предполагается, что сервер был запущен демоном inetd.

После создания сервера RPC, который будет вызываться inetd, следует добавить информацию об этом сервере в файл /etc/inetd.conf. Туда помещаются следующие данные: имя программы RPC, поддерживаемые номера программ, протоколы и полное имя исполняемого файла сервера. В качестве примера мы приводим строку из конфигурационного файла Solaris:

rstatd/2-4 tli rpc/datagram_v wait root /usr/lib/netsvc/rstat/rpc.rstatd rpc.rstatd

Первое поле содержит имя пpoгрaммы (которому будет сопоставлен номер с помощью файла /etc/rpc); поддерживаются версии 2, 3 и 4. Следующее поле задает конечную точку XTI (или сокет), третье поле говорит о том, что поддерживаются все протоколы видимых дeйтaгрaмм. Если свериться с содержимым файла /etc/netconfig, мы узнаем, что таких протоколов два: UDP и /dev/clts. Глава 29 [24] описывает этот файл и адреса XTI. Четвертое поле (wait) указывает демону inetd на необходимость ожидания завершения этого сервера перед включением режима ожидания запроса клиента для конечной точки XTI. Все серверы RPC указывают атрибут wait в конфигурационном файле /etc/inetd.conf.

Следующее поле, root, указывает идентификатор пользователя, с которым будет выполняться пpoгрaммa. Последние два поля задают полное имя исполняемого файла пpoгрaммы и имя пpoгрaммы вместе с необходимыми аргументами командной строки (у данной пpoгрaммы они отсутствуют).

Демон inetd создаст конечные точки XTI и зарегистрирует их в программе отображения портов для соответствующих номеров пpoгрaмм и версий. Мы можем убедиться в этом с помощью rpcinfo:

solaris % rpcinfo | grep statd

100001 2 udp    0.0.0.0.128.11 rstatd superuser

100001 3 udp    0.0.0.0.128.11 rstatd superuser

100001 4 udp    0.0.0.0.128.11 rstatd superuser

100001 2 ticlts 000020.  rstatd superuser

100001 3 ticlts 000020.  rstatd superuser

100001 4 ticlts 000020.  rstatd superuser

Четвертое поле содержит адреса XTI, причем 128?256+11 = 32779, и данное значение является временным номером порта, присвоенным этой концевой точке UDP.

Когда дейтаграмма UDP поступает в порт 32779, демон inetd обнаруживает готовность этой дейтаграммы к обработке и вызывает fork, а затем exec для запуска программы /usr/lib/netsvc/rstat/rpc.rstatd. Перед вызовами fork и exec концевая точка XTI будет скопирована в дескрипторы 0, 1 и 2, а все прочие дескрипторы inetd будут закрыты (рис. 12.7 [24]). Демон inetd также прекратит слушать эту конечную точку XTI, не реагируя на запросы пользователей до тех пор, пока сервер (дочерний процесс по отношению к inetd) не завершит работу. Это поведение определяется атрибутом wait.

Предположим, что эта программа была создана с помощью rpcgen. Тогда она сможет распознать конечную точку XTI, подключенную к стандартному потоку ввода, и инициализировать ее как конечную точку сервера RPC. Это осуществляется вызовом функций RPC svc_tli_create и svc_reg, которые в данной книге не рассматриваются. Вторая функция (вопреки названию) не регистрирует сервер в программе отображения портов — это делается лишь однажды, при запуске сервера. Функция svc_run прочитает пришедшую дейтаграмму и вызовет соответствующую процедуру сервера для обработки запроса клиента.

В обычной ситуации серверы, запускаемые демоном inetd, обрабатывают один запрос клиента и завершают работу, после чего inetd переходит в режим ожидания следующего запроса. Для оптимизации работы системы серверы RPC, созданные rpcgen, ждут поступления нового запроса от клиента в течение некоторого времени (по умолчанию 2 минуты). В этом случае дейтаграмма обрабатывается уже запущенным сервером. Это исключает накладные расходы на вызов fork и exec при поступлении нескольких клиентских запросов подряд. По истечении периода ожидания сервер завершает работу, а демону inetd отсылается сигнал SIGCHLD, после чего он переходит в режим ожидания дейтаграмм по XTI.

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

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

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

FTP-серверы

Из книги Музыкальный центр на компьютере автора Леонтьев Виталий Петрович

FTP-серверы Где же «живут» эти самые файлы в Сети и как получить к ним доступ?Что ж – если для информационных страничек была придумана система WWW, то и для файлов создана собственная Вселенная – сеть серверов FTP.Аббревиатура FTP означает File Transfer Protocol, протокол передачи


8.1. Суперсерверы inetd и xinetd

Из книги Linux-сервер своими руками автора Колисниченко Денис Николаевич

8.1. Суперсерверы inetd и xinetd В данной главе пойдет речь об общей настройке Интернет-суперсерверов inetd и xinetd, а также о настройке сервера xinetd для работы с протоколом IPv6.Для начала все же определимся, почему inetd(xinetd) называется суперсервером? Да потому, что он отвечает за


8.1.1. Настройка сервера inetd

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

8.1.1. Настройка сервера inetd Для начала разберемся с настройкой inetd. Этот сервер использовался в дистрибутиве RedHat до версии 7, в более новых версиях он заменен на xinetd (описание этого суперсервера приведено далее в п. 8.1.4…8.1.7). При конфигурирования inetd вам потребуется


8.1.4. Установкаx inetd

Из книги Сетевые средства Linux автора Смит Родерик В.

8.1.4. Установкаx inetd Суперсервер xinetd является достойной заменой inetd. Этот суперсервер, помимо всего прочего, обладает встроенными механизмами защиты, которые для inetd выполняет специальный демон tcpd. К тому же xinetd, в отличии от inetd, поддерживает IPv6. Даже если вы пока не


18.1. Сетевые серверы

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

18.1. Сетевые серверы Жизнь сервера проходит в ожидании входных сообщений и ответах на них.Не исключено, что для формирования ответа требуется серьезная обработка, например обращение к базе данных, но с точки зрения сетевого взаимодействия сервер просто принимает запросы


Использование inetd

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

Использование inetd В обычных условиях программа-сервер связывается с некоторым портом (ресурсом, для идентификации которого используется тип протокола и число в интервале от 1 до 65535). В зависимости от номера порта, указанного в запросе, этот запрос направляется тому или


Формат файла /etc/inetd.conf

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

Формат файла /etc/inetd.conf Для настройки inetd используется конфигурационный файл /etc/inetd.conf. Если не принимать во внимание комментарии (строки, начинающиеся с символа #), то можно сказать, что содержимое файла inetd.conf представляет собой набор строк, каждая из которых определяет


Серверы DNS для Linux

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк


Глава 21 FTP-серверы

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Глава 21 FTP-серверы Протокол FTP (File Transfer Protocol — протокол передачи файлов) существует давно и пользуется большой популярностью в Internet. Он обеспечивает обмен файлами между компьютерами, подключенными к сети. FTP-клиенты могут копировать файлы с сервера и, если позволяет


Web-сайты и Web-серверы

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

Web-сайты и Web-серверы Как мы только что выяснили, все интернет-программы делятся на клиенты и серверы. Клиенты работают на стороне пользователя, получают от них интернет-адреса и выводят им полученную с этих адресов информацию. Серверы принимают запросы от клиентов,


Серверы

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

Серверы На платформах, имеющих сервисы - Windows NT, 2000 и XP - сервер Firebird инсталлируется по умолчанию для запуска как сервис. Сервис инсталлируется и запускается автоматически по окончании процедуры инсталляции, а также при первоначальной загрузке серверной машины. Как


5.4. Демон inetd/xinetd

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

5.4. Демон inetd/xinetd Для того чтобы сервер смог обрабатывать запросы клиентов, программа должна быть постоянно загружена и связана с определенным портом. В этом нет ничего сложного, но зачем постоянно держать программу в памяти, особенно если она слишком большая, а работает


5.5.3. Серверы

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

5.5.3. Серверы Жизненный цикл сервера можно представить так:1) создание сокета, ориентированного на соединения (функция socket());2) назначение сокету адреса привязки (функция bind());3) перевод сокета в режим ожидания запросов (функция listen());4) прием поступающих запросов (функция


Глава 13 Процессы-демоны и суперсервер inetd

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

Глава 13 Процессы-демоны и суперсервер inetd 13.1. Введение Демон (daemon) — это процесс, выполняющийся в фоновом режиме и не связанный с управляющим терминалом. Системы Unix обычно имеют множество процессов (от 20 до 50), которые являются демонами, работают в фоновом режиме и


13.5. Демон inetd

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

13.5. Демон inetd В типичной системе Unix может существовать много серверов, ожидающих запроса клиента. Примерами являются FTP, Telnet, Rlogin, TFTP и т.д. В системах, предшествующих 4.3BSD, каждая из этих служб имела связанный с ней процесс. Этот процесс запускался во время загрузки из файла