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

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 使おうと思ったんだけど・・・む~ん・・・

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

トラックバック(0)

このブログ記事を参照しているブログ一覧: xinetd で No active service for file descriptor 0 とか。む~ん

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1975

コメントする

このブログ記事について

このページは、shinodaが2012年2月 8日 01:12に書いたブログ記事です。

ひとつ前のブログ記事は「新チームで初めての練習試合」です。

次のブログ記事は「100円ショップのグリーンカレーのオマケの新聞」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら