Запуск программ с xinetd
От: Аноним  
Дата: 18.07.08 07:55
Оценка:
Все привет!
Есть такая проблема. Если программу запускает xinetd-демон, то весь вывод, например, fprintf(stderr, "error")/fprintf(stdout, "message"), пишется в канал соединения и отправляется клиенту. Естественно, что если клиент не ожидает ничего такого, то отваливается. Как правильно избежать такого вывода клиенту? Сервер имеет возможность подключения плагинов, поэтому простое исключение подобных вещей из кода не решит проблему .
Re: Запуск программ с xinetd
От: Roman Odaisky Украина  
Дата: 18.07.08 08:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть такая проблема. Если программу запускает xinetd-демон, то весь вывод, например, fprintf(stderr, "error")/fprintf(stdout, "message"), пишется в канал соединения и отправляется клиенту. Естественно, что если клиент не ожидает ничего такого, то отваливается. Как правильно избежать такого вывода клиенту? Сервер имеет возможность подключения плагинов, поэтому простое исключение подобных вещей из кода не решит проблему :( .


#!/bin/sh

exec 2>/dev/null  # или в лог
exec $*

А без stdout никак — должен же клиент получить хоть что-нибудь.
До последнего не верил в пирамиду Лебедева.
Re[2]: Запуск программ с xinetd
От: Аноним  
Дата: 18.07.08 08:22
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:
RO>
RO>#!/bin/sh

RO>exec 2>/dev/null  # или в лог
RO>exec $*
RO>

RO>А без stdout никак — должен же клиент получить хоть что-нибудь.

Спасибо за совет! stdout тоже попробуем переправить.
Клиент получает сообщения в виде определенной структуры. Простой вывод просто убивает коннект. Мы пробуем прикрутить сторонние разработки, вот и наткнулись
Re: Запуск программ с xinetd
От: mxest  
Дата: 18.07.08 11:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть такая проблема. Если программу запускает xinetd-демон, то весь вывод, например, fprintf(stderr, "error")/fprintf(stdout, "message"), пишется в канал соединения и отправляется клиенту. Естественно, что если клиент не ожидает ничего такого, то отваливается. Как правильно избежать такого вывода клиенту? Сервер имеет возможность подключения плагинов, поэтому простое исключение подобных вещей из кода не решит проблему .


Можно сделать, чтобы stderr/stdout указывали на /dev/null

int handle = open("/dev/null", O_RDWR);
dup2(handle, fileno(stdout);
dup2(handle, fileno(stderr);
printf("test1\n");
fprintf(stdout, "test2\n");
fprintf(stderr, "test3\n");


При завершении работы сервера закрыть close(habdle);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.