• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ネットワークプログラムをデーモンで常駐したけれども…)

ネットワークプログラムをデーモンで常駐したけれども…

このQ&Aのポイント
  • シェルで文字列を交換する、簡単なチャットプログラムを作成しました。
  • スタンドアローンで動作させた場合、きちんと相手に文字列が届き、表示されるのが確認できるのですが、/etc/xinetd.d/serverd に設定し、クライアントプログラムを走らせると、接続は確立されるのですが、2,3回相手にメッセージを送ると、接続が強制的に切断されます。
  • 加えて、サーバープログラムをスタンドアローンで起動させた場合は正常に動作しますが、デーモンにした場合は問題が発生しました。クライアントから要求が来た場合に新しいシェルを立ち上げ、スタンドアローンで動作させた場合と同じ動作をさせ、接続が切れた時にシェルを閉じるように設定したいです。そのために、他にどのような設定を施せばよろしいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

それはもしや入出力をファイルと勘違いしてバッファリングされてしまっているのでは? xinetd を使った状態での解決方法はよくわかりませんが、面倒なら新たなユーザを useradd で追加して(その後普通にpasswdでそのユーザのパスワードを設定して)、vipw でパスワードファイルを編集してそのユーザのログインシェルを自分で作ったチャットプログラムに設定してしまったらいいんじゃないかと思います。(そして外部から telnet か ssh でアクセスしてログイン名とパスワードを入れてログインする)。 そうするとどうなるかというと、仮想端末が作られた状態での通信になるので普通にコンソールや telnet からアクセスしているのと同じになるためおそらくうまく行きます。(日本語については export LANG=ja_JP.UTF-8 など、スクリプトの最初の方で初期化しておけば対応できると思います)。 p.s. このようにするとログイン名とパスワードの入力やチェックを自作する必要がなくなりますし、ssh による暗号化通信をするとしても普通のユーザにするのと全く同じようにできるので楽です。

user_localhost
質問者

お礼

回答をくださりありがとうございます。 それについて、詳しく調べ挑戦したいと思います。 素っ気ないお礼となってしまい、申し訳ありません。

関連するQ&A