Читаем Linux API. Исчерпывающее руководство полностью

Флаги. Данное поле может содержать либо wait, либо nowait. Оно указывает, будет ли сокет службы управляться (временно) самим сервером, запущенным с помощью inetd. Если ответ положительный, то значение должно быть равно wait. Это заставит inetd удалить свой файловый дескриптор для данного сокета из набора, отслеживаемого путем вызова select(). Демон inetd не будет иметь доступа к сокету, пока сервер не завершит свою работу (это определяется благодаря обработчику для сигнала SIGCHLD). Мы еще вернемся к данному полю чуть ниже.

Имя пользователя. Это поле содержит имя пользователя из файла /etc/passwd; за ним через точку (.) может быть указано название группы, заданное в файле /etc/group. Так определяются групповые и пользовательские идентификаторы, которые будут применены к запускаемому серверу (демон inetd выполняется с помощью действующего идентификатора администратора, поэтому его потомки тоже наделены повышенными привилегиями; так что, если им нужно изменить учетные данные своих процессов, они должны задействовать вызовы setuid() и setgid()).

Серверная программа. В данном поле указывается путь к серверной программе, которую нужно запустить.

Аргументы серверной программы. В этом поле содержится один или несколько аргументов, разделенных пробельными символами, которые будут указаны при запуске серверной программы. Первый из них соответствует argv[0] и обычно обозначает имя исполняемого файла. Следующий аргумент соответствует argv[1] и т. д.

В строчках для служб ftp, telnet и login, приведенных в листинге 56.5, можно видеть, что серверные программы и их аргументы указаны не совсем так, как это описано выше. Во всех трех случаях изначально вызывается одна и та же программа, tcpd(8) (обертка для TCP-демона). Прежде чем запустить соответствующий сервер, она выполняет учет данных и проверку прав доступа. Исполняемый файл определяется на основе значения, заданного в качестве первого аргумента (который доступен для tcpd в виде элемента argv[0]). Дальнейшие подробности о tcpd можно найти на странице tcpd(8) руководства и в книге [Mann & Mitchell, 2003].

Серверы на основе потоковых сокетов (TCP), запущенные с помощью inetd, обычно обрабатывают единственное соединение, после чего завершаются, давая inetd возможность наблюдать за дальнейшими подключениями. В поле с флагом для таких серверов должно быть указано значение nowait (если запускаемый сервер продолжает принимать соединения, то нужно указать wait; в этом случае inetd не станет отслеживать запросы и передаст серверу слушающий сокет в виде дескриптора под номером 0).

Для большинства UDP-серверов поле с флагом должно быть равно wait. UDP-сервер, запущенный с помощью inetd, обычно считывает и обрабатывает все доступные для сокета датаграммы, после чего завершается. (Как правило, это требует применения времени ожидания при чтении из сокета, чтобы сервер мог завершиться, если за отведенный отрезок не поступило ни одной новой датаграммы.) Значение wait не дает демону inetd выполнить для сокета вызов select(), пока сервер работает, так как это может привести к нежелательным последствиям, например к соперничеству демона inetd и UDP-сервера за право проверить наличие датаграммы (и если первый выиграет, то ему придется запустить еще один экземпляр сервера).

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

Для лучшей эффективности inetd сам реализует несколько служб, чтобы не запускать отдельные серверы для выполнения ряда задач. Как пример можно привести службу echo, работающую по UDP и TCP. В таких случаях в качестве серверной программы в файле /etc/inetd.conf указывается значение internal, а соответствующие аргументы опускаются (в листинге 56.5 мы видели: строчки для службы echo закомментированы; для включения службы echo нужно убрать в начале этих строк символ #).

Чтобы демон inetd смог заново прочитать обновленную конфигурацию, при каждом изменении файла /etc/inetd.conf ему нужно отправлять сигнал SIGHUP:

# killall — HUP inetd

Пример: вызов TCP-службы echo с помощью inetd

Ранее мы отмечали, что inetd упрощает написание серверных программ, особенно работающих в параллельном режиме (обычно по TCP). Это достигается за счет выполнения следующих шагов во время запуска сервера.

1. С использованием вызовов socket(), bind() и listen() (для TCP-серверов) инициализируются все структуры, связанные с сокетом.

2. Выполняется вызов accept() для новых TCP-соединений.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных