=encoding euc-jp =head1 名前 Net::Daemon - 移植可能なデーモンのためのPerl拡張 =head1 概要 # Net::Daemonのサブクラスの作成 require Net::Daemon; package MyDaemon; @MyDaemon::ISA = qw(Net::Daemon); sub Run ($) { # この関数が本来の仕事をします; これは新しく接続がおこなわれるたびに # 呼び出されます } =head1 警告 これはALPHA状態のソフトウェアです。これはインターフェース(API)が最終的に 確定されていないためだけに'Alpha'になっています。Alpha状態はコードの品質や 安定性には当てはまりません。 =head1 説明 Net::Daemon はとても簡単に移植可能なサーバー・アプリケーションを実装するための 抽象クラスです。このモジュールはPerl5.005のために設計されていますが、fork()と Perl5.004で機能します。 Net::Daemon クラスはデーモンに必要なほとんどの一般的なタスクのためのメソッドを 提供します:起動、ログ出力、クライアント認証、セキュリティのために自分の環境を 制限すること、そして本当の機能をおこなうこと。あなたはあなたの目的に合わない メソッドだけを上書きするだけでよいのです。しかし典型的には継承すれば仕事が 大幅に減らしてくれるでしょう。 =head2 コンストラクタ $server = Net::Daemon->new($attr, $options); $connection = $server->Clone($socket); 2つのコンストラクタが利用できます:Bメソッドは起動時と基本的にプログラム全体での アンカーとして機能するオブジェクトが作られるときに呼ばれます。これはL を 通じてコマンド・ラインの解析もサポートします。 Bの引数は属性のハッシュ・リファレンスであるI<$attr>(下記をご覧ください)と オプションの配列リファレンスであるI<$options>で、これは典型的にはコマンド・ライン引数 (例えば B<\@ARGV>)で Bに渡されます。 2番目のコンストラクタはBです。これはクライアントが接続するたびに呼ばれます。 これはメインのサーバー・オブジェクトを入力として受け取り、新しいオブジェクトを返します。 この新しいオブジェクトは、最終的にクライアントと通信する本来の仕事をおこなうメソッドに 渡されます。通信はBの引数である、B<$socket>ソケットで行われます。 設定できるオブジェクト属性と対応するコマンドラインの引数は以下の通りです: =over 4 =item I (B<--nocatchint>) いくつかのシステム、特にSolarisではaccept()、read()などの関数は シグナルによる中断に対して安全ではありません。例えば、ユーザが USR1シグナル(典型的には構成設定ファイルの再読に使われます)をおこすと、 関数はエラーEINTRを返します。もしIオプションがオンであれば (デフォルト。オフにするには --nocatchint を使ってください)、 パッケージはできる限りEINTRエラーを無視します。 =item I (B<--chroot=dir>) (UNIXのみ)bind()をした後、chroot()をすることによりルート・ディレクトリを 指定されたディレクトリに変更します。これはセキュリティ操作に便利です。 しかしこれはプログラマに多くの制約を与えます。例えば典型的には、chroot()する前に 外部のPerl拡張をロードしなければなりませんし、あるいはUnixソケットへハードリンクを 作成する必要があります。これは典型的には構成設定ファイルで行われます。 --configfile オプションをご覧ください。また --group と --userもご覧ください。   chroot()をご存じなければ、ログインした後にだけ、あるディレクトリ・ツリーを 見ることができるFTPサーバーを考えてみてください。 =item I クライアントのリストを持った配列リファレンス。clientsは ハッシュ・リファレンスで、その属性はaccept (0ならば受入ない、1なら許可)、 そしてクライアントIP番号またはホスト名のためのPerl正規表現であるIに なります。下記のL<"アクセス制御">をご覧ください。 =item I (B<--configfile=file>) Net::Daemon は構成設定ファイルの使用をサポートしています。 これらのファイルには、newメソッドの引数を上書きする1つのハッシュ・リファレンスが 入っているものと想定されます。しかしコマンドライン引数は構成設定ファイルよりも 優先されます。構成設定ファイルについての詳細は下記のL<"構成設定ファイル">を ご覧ください。 =item I (B<--debug>) デバッグ・モードをオンにします。主にこれはレベル"debug"のログ出力メッセージが 作成されることを意味しています。 =item I (B<--facility=mode>) (UNIXのみ) Lでの facility。デフォルトはBです。 =item I (B<--group=gid>) bind()をした後に、実際のそして実効のGIDを与えられたものに変更します。 これはサーバーを特権ポートにbinnd(<1024)にバインドしたいときに便利です。 しかしrootとしてサーバーを実行したいと思わないで下さい。--userオプションも ご覧ください。 GIDにはグループ名も数値も渡すことができます。 =item I (B<--localaddr=ip>) デフォルトではデーモンはマシンが持っているIP番号の全てについて listenします。この属性は与えられたIP番号にサーバーを限定することを 可能にします。 =item I (B<--localpath=path>) サーバーをローカル・サービスにだけ限定したければ、もしできるのであれば Unixソケットを使いたいでしょう。その場合、作成されるUnixソケットのパスを 設定するため、このオプションを使うことができます。このオプションは B<--proto=unix>も含みます。 =item I (B<--localport=port>) この属性は、デーモンがlistenするポートを設定します。それは何らかの方法で 与えられなければなりません。デフォルトはありません。 =item I (B<--logfile=file>) デフォルトではログメッセージはsyslog(Unix)またはイベントログ(Windows NT)に 書き込まれます。他のオペレーティング・システムではログ・ファイルを指定する 必要があります。特殊な値 "STDERR"は 標準エラー出力(stderr)にログを 出力させます。 =item I (B<--loop-child>) このオプションはループのための新しい子供プロセスを作成させます (Iオプションをご覧ください)。デフォルトでは、ループは 1つずつ処理されます。 =item I (B<--loop-timeout=secs>) いくつかのサーバーはある時から時へ行動する必要があります。 例えば、Net::Daemon::Spoolerは5分毎にそのスプーリング・キューを空に しようとします。このオプションが正の値に設定されると(デフォルトでは0)、 サーバーは"loop-timeout"秒毎に、そのLoopメソッドを呼び出します。 このインターバルの精度をあまり信用しないで下さい。これはいくつかの要素、 特にLoop()メソッドの実行時間に依存しています。ループはI