Linux OS で Inetd/xinetd と連携するサーバー/クライアント プログラムを作成するために、Qt を使用しようとしています。
このテキストでサービス構成ファイルを /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;
}
サーバー プログラムの問題は、メイン関数の 2 行目にあり、この行以降はプログラムが続行されません。この行の後に何かを印刷すると画面に表示されませんが、この行の前に何かを印刷すると印刷メッセージが表示されます。Inetd/xinetd が動作しない理由がわかりません QApplication app(argc, argv);
この行と他の行(app.exe)を削除すると、プログラムは直接終了しました。
オブジェクトclientproc(....)で何度も使用しているため、QApplicationが必要です。
この問題を解決して、qt を Linux の inetd/xinetd で動作させるのを手伝ってくれませんか。