電気ウナギ的○○

About Home

xinetd で No active service for file descriptor 0 とか。む~ん

shinoda (2012年2月 8日 01:12)
UDP プロトコルでデータ受信するプログラムを xinetd 経由で実行しようと思ってたんだけど、どうもうまくいかんなあ。

以下の環境でテストを実施。

・OS 及び xinetd

CentOS 6.2
xinetd 2.3.14
Perl 5.10.1

・/etc/services にサービス追加

hogehoge        50001/udp

・/etc/xinetd.d/hogehoge を作成

service hogehoge
{
        disable         = no
        user            = root
        wait            = no
        server          = /usr/local/bin/hogehoge.pl
        socket_type     = dgram

}

・テスト用サーバ(/usr/local/bin/hogehoge.pl)

#!/usr/bin/perl

$d = <STDIN>;
exit();

・テスト用クライアント(./udp_client.pl)

#!/usr/bin/perl

use IO::Socket::INET;

$c = IO::Socket::INET->new(
  PeerAddr => "localhost",
  PeerPort => 50001,
  Proto    => "udp"
) or die $!;

$c->send("hello");
$c->close;

これで、クライアントを実行すると、一応 xinetd 経由で hogehoge.pl は起動するのだが、いつまで経っても終了せず。

/var/log/messages に、

Feb  8 00:08:47 server1 xinetd[8188]: 1 descriptors still set
Feb  8 00:08:47 server1 xinetd[8188]: No active service for file descriptor 0

というメッセージが延々出続ける。

file descriptor 0 ってことは、標準入力(STDIN)がアクティブになってないってこと?どういうこと?
xinetd は自分が受信したデータを標準入力でプログラムに渡すのだが、No active service for file descriptor 0 だからそれがうまく渡せないということだよね?

なんでそうなるかがわからん。

以前(もう数年前のことだが)、tcp でデータを受け取るプログラムを xinetd 経由で動かしたことあるけど、こんなエラーが出たことはないでぇ~
む~ん・・・

自前でサーバ書くと、スポーンした子プロセスがゾンビ化したり、親プロセスが原因不明で固まったりって時の処理(監視も含めてね)考えたり、そのプログラム書くのが面倒だなあと xinetd 使おうと思ったんだけど・・・む~ん・・・

「馬鹿め!○○設定をせんかい!」みたいな識者からのお叱りをお待ちしてます。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1975

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE