Пример с суперсервером inetd

Опубликовано в Технологии > Серверные технологии

Рассмотрим простую программу, которая позволит пояснить описание конфигурации суперсервера inetd и привести некоторые дополнительные сведения. Предположим, что программист хочет отладить новый сервер для службы DAYTIME. Этот новый сервер должен обеспечить дополнение конфигурации суперсервера inetd. Во-первых, новой службе назначается временное имя, также на время выбирается номер порта протокола и информация добавляется к базе данных системных служб. Например, если программист выберет имя timetest и номер порта протокола 10250, то к файлу /etc/services может быть добавлена следующая запись:

timetest 10250/tcp 

Кроме того, необходимо написать серверную программу. Поскольку задачу создания необходимого сокета и приема входящих запросов на установление соединения выполняет суперсервер inetd, серверная программа не должна содержать кода выполнения таких действий; в сервере достаточно обеспечить обмен данными через одно соединение. Например, файл inetdjdaytimed.c содержит код' сервера DAYTIME, который может использоваться с суперсервером inetd:

/* Файл inetd_daytimed.c - главная процедура */ tinclude  tinclude  
/*	
* Главная процедура - клиент inetd для службы DAYTIME
*	.	
*/
int
main(int argc, char *argv[]) {
char *pts;	/* Указатель на строку со значением времени */
time_t  now;	/* Текущее время */
char *ctime();
 

Как показывает этот пример, для создания простого сервера с установлением логического соединения, вызываемого суперсервером inetd, достаточно предусмотреть лишь небольшой объем кода. После приема входящего запроса на установление соединения суперсервер inetd передает полученное соединение в дескриптор файла 0 перед вызовом сервера на выполнение. Таким образом, в сервере для обмена данными с клиентом всегда используется дескриптор 0. Кроме того, в сервере не содержится код, позволяющий выбрать последовательный или параллельный режим выполнения, поскольку все эти действия выполняет суперсервер inetd. картридж hp купить, CB436A, картриджи xerox 3119 купить

После трансляции кода сервера и размещения полученной выполняемой программы в файле можно изменить конфигурацию суперсервера inetd и включить в нее ссылку на новый сервер. Например, если оттранслированная версия приведенной выше программы находится в файле /pub/inetd_daytimed, то в файл конфигурации /etc/inetd.conf можно ввести следующую запись:

timetest stream tcp nowait root /pub/inetd_daytimed inetd_daytimed 

В этой записи приведено имя службы timetest и указано то, что для нее требуется потоковый сокет stream и протокол tcp. Сервер работает параллельно (nowait), причем от имени пользователя root. И наконец, выполняемая версия сервера находится в файле /pub/inetd_daytimed, а единственным параметром командной строки, передаваемым серверу, является его имя, inetd_daytimed.

Похожие статьи