Я пытаюсь использовать Qt для создания серверной / клиентской программы, которая работает с Inetd / xinetd в ОС Linux.
Я добавил файл конфигурации службы в /etc/xinetd.d/testServ
с этим текстом
service testServ
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/testServer
}
Затем я добавил эту строку в / etc / services
testServ 5050/tcp # the service uses the port nr 5050 and tcp protocol
Я создал специальную клиентскую программу, которая подключается к серверу с указанным портом, который работает без проблем.
Проблема в программе сервера. Я написал этот код в основной функции серверной программы
Int main(int argc, char *argv[]) {
qDebug()<<"starting the daemon version of server client app";
QApplication app(argc, argv);
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stdin, NULL, _IONBF, 0);
QFile fstdin;
QFile fstdout;
fstdout.open(stdout, QFile::WriteOnly|QFile::Unbuffered);
fstdin.open(stdin, QFile::ReadOnly);
CleintProcess clientproc (NULL, &slog, argc, argv, &fstdin, &fstdout);
app.exec();
return 0;
}
Проблема в программе сервера находится на второй строке основной функции, программа не продолжается после этой строки. Если я что-то печатаю после этой строки, она не появляется на экране, но если я что-то печатаю до этой строки, появляется сообщение для печати.
Я не знаю, почему Inetd / Xinetd не работает с QApplication app(argc, argv);
когда я удаляю эту строку и другую строку (app.exe), программа прекращает работу напрямую.
Мне нужно QApplication, потому что я использую его много раз в объекте clientproc (….).
Можете ли вы помочь мне решить эту проблему и заставить qt работать с inetd / xinetd в linux.
Задача ещё не решена.
Других решений пока нет …