特集 Bf0ddbdIld SO 岫 00 Sh011JCdSe 旧 v6 への対応 Web マ 42 、マルチキャストのメニューがない ! " と慌てたこともありましな 8 うつかりして Standard Edition をインストールし、それに気づかす setup. html 7 http://www-jp ・ netapp ・ com/pr0ducts/netcache/lPv6/ Windows Server 2003 はオ剽で IPv6 による通信に IPv6 への対応 ンは別途インストールする必があります。 されないため、 Windows Media などのアフリケーショ フォルトで不要と思われるものはインストール時には導入 なお、 Windows server 2003 は、、安全第一 " で、デ tion にはマルチキャスト機能はありません 8 ステムを構築するときは注意が必要です。 Standard Ed- tion と Enterprise Edition では機能が異なるので、シ るには Enterprise Edition が必要です。 Standard Edi- りますが、 Windows Media でマルチキャストを利用す Windows Server 2003 には 4 種ま頁のノヾージョンがあ xSeries を 1 台を用意しました。 case プースで分散配信をおこなうため、これらとは別に 台、 lntel のサーノヾーが 1 台です。・会場内の IPv6 Show- インストールしたサー ーは、 IBM の xSeries が 3 、 Vindows Server 2003 システムを構築しました。 この Windows Server 2003 で IPv6 マルチキャストの た Windows Media サービスも提供できます。そこで、 標準てサポートしています。さらに、機能か増え強化され た。 Windows server 2003 は IPv4/IPv6 の通信オ幾能を 今回は、 IPv6 マノレチキャストによる配信に羽鉞しまし IPv6 マルチキャスト NetCache がある方は試してみてはいかがでしようか。 く、夬に動いていました。設定も簡単なので 7 、手近に としてサービスを提供しました。とくに目立った問題もな た NetCache を IPv4++IPv6 のリノヾース・フロキシー のオフィシャル web サイトも、 BBSSC て利用してい 連の IPv6 対応がなされています。 N 十 I の IPv4 向け キャッシュ製品 NetCache のム辭斤 OS では、 Web 関 対応しているため、 IPv6 のモジュールをインストールし てこれを有効にします。アドレスの設定は、クライアント・ マシンであれは RA を用いて自動取得するのか普通です が、今回はサーバーなので手動でおこないました。 設定は GUI ではなく、コマンド・プロンフト上で netsh コマンドを利用します。 Windows Media サービス BBSSC では、プース内に設置された 4 台の Win- dows Server 2003 の Windows Media サービスの機 能を利用し、会場内の様子やセッション、エンターティン メント ( 映画や音楽にの紹介 ) 、 ShowNet の状態の合言 1 ・ 4 チャンネルの映像を、会場内・会場外に各 '250Kbps 、 500Kbps 、さらに 10Mbps の帯域て配信しました。これ は、会場に来られない人や、来場前の下十ヾや事後の石忍 など、ちょっと覗いてみたいという人に、会場の雰囲気を 味わってもらおうと考えて企画しました。 会場内外へは、 Windows Media 9 のエンコーダから 4 台のサーバーが PULL 形式でストリーミング・データ を取得し、ユニキャストで配信しました。 マルチキャスト さきはども簡単に触れましたが、今回は IPv6 のマルチ キャスト配信をおこないました。 IPv6 ShowCase プース に分昔己信用サーバーを 1 台置き、 BBSSC 内のサーバー と IPv6 で通信するようにしました。 IPv6 ShowCase で ネ期される映像は、すべてこのう攵サーバーから配信して いたわけです。分故サーバーの設置により、視聴者にもっ とも近いサーバーから配信されることになります。 マルチキャストの設疋は、ユニキャストの場合とすこし 異なります。公開ポイントは、通常のユニキャストと同様 に作成します。このとき、以下の頁を決めておくと竹喋 がスムーズに進みます。 ・ユニキャストとマルチキャストの両方を配信するのか、 それともマルチキャストだけを配信するのか。 ・ストリームを再生する入口 Web サイトの URLO ・インターフェイスの制限の有虹 ーすべてのインターフェイス十あるインターフェイス の IPv4 ーあるインターフェイスの IPv6 UNIX MAGAZINE 2003.11
ー② 連載 PerI 活用のヒント 2 つの select Perl の糸町ムみ関数 select には引数が 0 または 1 つのもの と、 4 つのものがあり、 select システムコールに対応するのは 後者である。前者は、ファイルハンドルカ甘旨定されなかったと きの出力先を知らせたり変更したりする。 引数の数によってまったく違う乍をするのは変だが、 なったことには事清がある。以下の URL には、 perl のネ川月 のバージョンへのリンクがある。 ・ http://history.perl.org/PerlTimeline.html 全体か書き込まれる。 このプログラムでは I/O 待ちが発生しないソケットだ けを読み込んでいるのに対し、書込みについては同様のこ とをおこなっていない。書込みに待ちが発生するかをヾ ておき、発生するなら待つようにしたほうがよいと思う人 もいるだろう。私も最初は同様に考え、そのようにプログ ラムを書いてみた。しかし、結果としてきちんと重川乍して くれなかった。プログラムか書込み可能なソケットを探す ために select を実行し続けて負荷か高くなり、正しく動 かなかったのである。 micro-relaytcp は WindowsTTJ くか Windows でも動くリスト 4 のプログラムができたの で、 relaytcp を説明する準備は整った。しかし、私はリ スト 3 のプログラムを Windows で動力せないか気になっ たのて司べてみた。 fork の代わりにスレッドを使う f 。 rk か駄目ならスレッドはどうだろうか。 Perl 5.6 で は実用的なスレッド機能として ithreads が導入されたの で、ためしに書いてみたのがリスト 5 である。これはリス ト 3 よりさらに悪く、 UNIX 上でも重川しなかった。そ して、当然のことながら Windows でも動かない。興味 深いことに、リスト 5 のプログラムの動作は UNIX 上で も Windows 上でもリスト 3 の Windows 上での重川乍と 同しだった。 Windows 上の fork はスレッドを使ったエミュレー ションであり、リスト 5 とリスト 3 は結果的に同しよう な動作をしているのではないだろうか。また、リスト 5 の 場合は、 UNIX 上でも 1 つのプロセスの複数のスレッド UNIX MAGAZINE 2003.11 このページからリンクをたどり、 1987 年 12 月にリリース された Perl 1.0 をダウンロードしてみた。そのマニュアルを 見ると、引数が 0 または 1 つの select はすでにある。一方 で、 select システムコーノレなどのソケット関 ; 里のシステムコー ルを実行する糸Ⅲ囚み関数はまったくない。 select システムコー ルの select を備えるようになったのは、 1989 年 10 月にリ リースされた Perl 3.0 からである。 が同しソケットにアクセスするが、 こうした挙動は本来想 定されていないのではないかと思う。 リスト 5 についてすこし説明しておこう。 7 ~ 12 行目 は、別のスレッドで実行される箇所である。、、 threads- 〉 new" にはサプルーチンへの参照 (reference) を渡すので、 素直に書くと以下のようになる。 sub a { . threads—>new (\&a) ; しかし、、、 sub {... } " のように名前のない (anony- mous) サプルーチン定義の値はサプルーチンへの参照に なるので、リスト 5 のように書くことができる。 sub に 続けてサプルーチン名なしで { がくるのは間違いでは なく、名前のないサプルーチンの定義という正式な PerI の機能を使っている。 select を使う やはり Windows では、 2 つの (å疑 ( 切プロセスやスレ ッドで双方向のデータ転送をおこなうのは無理で、 select を使うしかなさそうだ。そこで、リスト 3 を select を使っ て書き換えたのがリスト 6 である。 こちらは、 UNIX 上ではリスト 3 と同様に間題なく動 作する。しかし、 Windows では起重丿けるとすぐに終了し てしまう。これは、 Windows の Perl では select がソケ ットだけを対象にしていることが原因だった。 perldoc perlport" の「 FUNCTION IMPLEMENTATIONS 」 の節にある select の言当を見ると、このことに言及してい る。 select は STDIN に対して動作しないのである。 リスト 3 を Windows で動かすためにいろいろ試して みたが、手軽に実現するのは無理なようである。 Active- Perl は Windows の API を扱うモジュールをもっている 67
RASTEC ASTEC ー X は教育機関を応援します。、 = : 、、、ⅲ dows 対応 p ( x サーバアステック・エックス 多くの教育機関で UN Ⅸ / Linux の実習用ソフトとしてご導入いただいている ASTEC - X 。さらに高まりを 見せる UN Ⅸ / Linux 教育ニーズに応えるため、教育機関向けのアカデミックライセンスをご用意しました。 アカデミックライセンスは 1 ライセンス 29 , 000 円、ポリ、一ムディスカウシト善ございます。 ? アミ " ? ライセンス 洋じめました ーサ犬ート 疫た日語環吭 、 >Z—メ〒デリ・使、フ 2 。。 3 年月 1 日発行 ( 毎月 1 回 1 日発行 ) 第絽巻第号通巻号 ー SO 「 is 、 HP-UX から Linux まで、主要な UN Ⅸ系 OS に対応 ー MS-IME 、 ATOK などの Windows の日本語入力機構から、 X アプリケーションに入力可能 ー Windows - x 間で日本語文字列のカットアンドベーストをサポート ー 4 種類のウインドウモード ( マルチ / シングル / 仮想スクリー . ン / フルスクリーン ) をサポート ー Windows の色数設定とは独立した、 256 色工ミュレーション機能 ー設定アシスタントでらくらくセットアップ ー GLX 工クステンションによる三次元描画機能 ーセキュアシェルプロトコルによる暗号化通信 / 転送データ圧縮 / XI 1 フォワード機能 ー X 、 rexec 、セキュアシェルの各プロトコルで v6 に対応 : Windows XP/Windows 2000/Windows NT 4. O/Windows Me/Windows 98 OS : PC / AT 互換機 / PC -9800 シリーズ 機種 対応 U N Ⅸ : SoIaris/SunOS/HP-UX/AlX/Tru64UN Ⅸ / 旧 lX/EWS4800/Linux/ 各種 PC UNIX など : 標準ライセンス 78 , 000 円 ( 税別 ) / アカテミックライセンス 29 , 0 圓円 ( 税別 ) ・価格 アカデミックライセンスの販売条件等については、お問い合わせください。 評価版公開中 ! アステックサイトへ http://www.astec. CO. ル/ redhat. 第 1 ASTEC - X に関するお問い合わせは e-mail:info@astec.co.jp 本社営業部 〒 112-0002 東京都文京区小石川 1 -3-11 イト - ヒ。ア小石川梅津ビル Te に 03-5804-1853 Fax : 03-5804-1854 株式会社アステック 関西営業所 〒 532-0011 大阪府大阪市淀川区西中島 5-6-13 新大阪御幸ビル 6F Te に 06 : 6307-5122 Fax : 06-6307-5124 ・記載の商品名、会社名は、各社の商標または登商標です。 ⅢⅢ IIIIIIIIIIIIIIIIIIIIII T 1 1 089 0 1 1 1 1 1 0 4 株式会社アスキー 定価 1 , 100 円本体 1 , 048 円 雑誌 08901 ー 11
これに対して、以前は MMMCheck を使っていたが 3 , 000 通を処理できるかは不明である、 POP サーバーに 接続してヘッダを順次表示し、ユーサーから削ミが あると DELE コマンドを発行する処理を繰り返すもの を望んでいるのなら、 POP サーバーと接続を切るまで実 際にはメールを削除しないサー ・ソフトウェアが多 いので、膨大な数の DELE コマンドを溜められすにハ ングアップしているのではないか、すでに試したソフト ウェアでも、適当な数の処理をおこなった点でいった ん接続を切ればうまくいくのではないか、 PerI のプログ ラミング解説書に POP サーノヾー上のメッセージのヘッ ダと先頭 3 行を表示するサンプル・プログラムがあった ので、それを改造して POP サーバー上のヘッダを取得 し、大文字の、、 SUBJECT" と、、 FROM " て始まる項目 があれば Swen ワームと判断して削除するプログラムを 作って動かしている、 Windows Me で 3 , 000 通のメー ルを処理できるかは試していないが nPOP がよいのでは ないか、 Windows 2000 や XP 上では 2 000 通のメー ルを処理したことがある、といったフォローがきました。 その後、元記事の投稿者から、 nPOP を使ってみたと ころ、すべてのメールの一手阜理は試していないが、メー ルの読込みを途中で止めながら削除することはできそう だ、という報告がありました。 Newsgroups ・ . OS. ms-windows. xp Sub. 」 ect: NTP Server Windows は XP から NTP クライアントの機能を備 え、標準で有効になっていてイ甦リです。しかし、サーバー にもなっているのか UDP の 123 番ポートカ鯛いたまま で、 WindowsTime というサービスを止めると NTP ク ライアント機能が使えなくなってしまうようです。ほか のソフトウェアは利用せず、 NTP クライアント機能を 使えるようにしたまま UDP の 123 番ポートを閉じる方 法はないでしようか、という質間記事です。 これに対して、 Windows の、、時刻の同期 " 機能かプロ トコルとして SNTP だけを使用していることや、 NTP/ SNTP が 123 番ポートを使うことを考えると、希望の 設定にするのは無理ではないか、どうしても 123 番ポ ートを閉したけれは、、、ほかのソフトウェアは利用しな い " という条件は満たせないが、 Vector などから HTTP を使う専用の日駭リ同期ソフトウェアを入手したらどうか、 Windows の、、時刻の同期 " は週に 1 回しか同期しない ので間隔が長すぎる、その意味でも専用の時刻同期ソフ トウェアを勧める、レジストリ内の時刻関係のパラメー タを調整す川よ変更できるのではないか、 gpedit. msc で 、、管理用のテンプレート " を編集すれば設定を変更できる はすだ、といったフォローがきました。 Newsgroups. . OS. ms-windows. xp Subject: 定期的にティスクアクセスをさせたい HD の一矍のために、タスクスケジューラを使って HD に定期的にアクセスさせたいのですが、常駐ソフトウェア ではなく、動作か軽くて、毎回確実にアクセスできるガ去 はありませんか、という質問記事です。 これに対して、バッチファイルを作成してタスクスケ ジューラに実行させたらどうか、たとえばファイルのコ ピーを実行するようにしておけば、ファイルサイズを変え ることでアクセス時間を整できる、タスクスケジューラ を使わなくても、 at コマンドでコマンドを実行する時刻 を複委財旨定するガ去もある、定期的なアクセスで HD が ーできるのか、モーターの停止と回転の区しを避けた いだけなら省電力関連の設定で回避できるはずだ、といっ たフォローがきました。 これに対して、元記事の投稿者から、「 HDD ノンクラ ッシュ」というフリー・ソフトウェアの作者によると、 HD がクラッシュしやすいのは通電していてもアクセスがな いときで、その状態だとヘッドのスライダに潤滑油が溜 まり、次のアクセス時にスライダに引っ掛かりカ吽して振 動してしまうようだ、という追加情幸寸高されました。 これに対してさらに、出典が示されていないが、ソフ トウェアの作者か勝手にそう思っているだけではないか、 以前「日経 W ⅲ PC 」にそのような記事か載ったらしい、 ほかの郊誌にもこの件に関係する記事か載ったようだ、そ うだとしても効果があるのかは疑間だ、一殳に HD のク ラッシュは別の要因のほうが大きいのではないか、スラ イダに油カ鰡まって振動するというのは、 CD ドライプ ドライプと勘違いしているのではないか、 やフロッピー といったフォローがきました。 Newsgroups: fj.comp. dev. disk fj.comp. dev. memory Subject: 4GB CF media Subject: swap on flash memory を / 第を : 第す新島等を新物第等 . 等等信等を . 既島等第既を日に等をす信等 : 既をす・ : 既 3 物を第す UNIX MAGAZINE 2003.11 153
特集 胙 0d 曲 S01Ution 5h011JCdSe works の BigIron や Extreme Networks の Sum- mit5i 、 Cisco の Catalyst 3750 で、その直下に Net- work Appliance の NetCache 、 BlueCoat などのキャ ッシュ製品を配置し、 ShowNetTV などのコンテンツを 配信しました。セキュリティに関しては、 Nokia の Fire- wall を使って外部ネットワークからの攻撃に対処しまし 、一 0 構築・運用面での苦労 BBSSC では、 ShowNet を利用しながら、広域のイ反想 CDN 配信デモを実施したり、マルチキャスト配信デモの 動作環境を整備していきます。このようなシステムでは、 ネットワークの運用管理、配信アプリケーションやコンテ ンツ処理など、さまざまな場面でそれぞれ異なるオペレー タが竹喋をおこないます。ストリーミングに携わった経験 のある人なら痛感していると思いますが、 こで一番難し いのは、知識も経験も異なるオペレータ間で意の凾を 図り、竹喋をスムーズに進行させることです。今回も、 の点では苦労しました。 BBSSC にはさまざまなべンダーが参加するため、必然 的に利用する製品も多種多様になります。そのため、ネッ トワーク設引・の段階でどこにどの製品を配置するかにすい ぶん頭を悩ませました。また、現点では CDN 製品は完 全に IPv6 に対応しているわけではありません。したがっ て、変換用の IPv4 の DNS サーバーを別に用意したり、 あるいは IPv6 を切り離したりしながらネットワークを構 築する必要もあります。あらゆる CDN 製品が IPv6 に 対応するまでには、もうすこし日判肋ゞかかりそうです。さ らに、今回はマルチキャストや DVoverIP に関連する製 品が多数出展されていたため、トラフィックの管理にもか なり苦労しました。 マ 今回は、数多くのサーバーやネットワーク機器を使って システムを構築しています。サーバ ーには、 lntel や IBM などから借用した IU または 2U のサーバータイプのも のと、 NEC から借用したプレードサーバーを利用しまし た。これらのサーノヾーのおもな用途は、 Web 、ストリー ム、 DNS 、監視系といったところです。 サーバー UNIX MAGAZINE 2003.11 ストリーム系のサーノヾーについては、 Red Hat Linux 7.3 をインストールした Helix (Rea19) 用のサーバーを 2 台、 Windows Server 2003 をインストールした Win- dows Media 9 用のサーバーを 4 台、そして、セットトッ フ・ポックス向けの MPEG-2 配信サーバーとして Win- dows 2000 Server を 5 台用忌しました。さらに、 Win- dows Media サービス 4.1 の親サー ーとして Starbak の Torrent OSA を 2 台割り当てています。これらのは かにも、予備の Helix サーノヾー、 DNS やⅥ b 、 FTP の サーバーを用意しました。 ストリーム配信用のキャッシュ・サーバーは、 Network Appliance の NetCache や Starbak の Torrent などを 利用しました。 おもしろい酉言箱 Torrent OSA 今回のストリーミング配信システムでは Windows Media 8 、 Windows Media 9 、 Helix の 3 不重類のメ ディア形式でライフ配信をおこないました。これらのう ちの Windows Media 8 の親サー ーとして使ったの が、日商工レクトロニクスから借用した Starbak の Tor- rent OSA です。冗長構成を施し、一 E 流のレイヤ 4 スイ ッチ (Cisco CSM) を用いて MMS (Microsoft Media Server : Windows Media 用のフロトコル ) の負荷分昔攵 をおこない、而章害陸を高めました。 7 月号の「サイバー関西プロジェクト」でも紹介しま したが、 Torrent OSA は世界初のストリーミング専用 サーバーで、言段階からストリーミングでの利用を前提 にチューニングされた Linux べースの OS を用いていま す。その最大の特徴は、 Linux べースの OS 上で Win- dows Media の配信が可能という点にあります。さらに QuickTime や MPEG-1/2/4 も 1 台のマシンから配信 できます。アプライアンスとして言 fr されているため、汎 用 OS を使ってストリーミング・サーバーを構築した場合 にくらべてセキュリティ面で安全であり、かっ運用も容易 です。設定も簡単で、今回の N 十 I で Torrent OSA を 設置したときも、電源の投入後、 10 分ほどで設定イ喋が はは終るほどスムーズでした。 Torrent OSA のム形ヾージョンは、 Windows Media 9 と MPEG-4 (ISMA : lnternet Streaming Media AI- liance) に対応しています。 このほかに、ライフ紀信回 33
連載 / pe 日活用のヒント リスト 2 perIfaq8 のサンプル・プログラム ー② # new in 5 . 004 1 2 3 4 5 6 7 8 9 10 11 12 use IO: :Socket; $handle IO: :Socket: :INET—>new('www.perl . C0m:80)) Ⅱ die "can't connect tO port 80 0 Ⅱ www.perl . com: $ ! " ・ $handle—>autoflush(l) ; if (fork()) { # XXX : undef means failure select($handle) ; print while く STDIN>; } else { print while く $handle> ; close $handle; exit; # everything from stdin tO socket # everything from socket tO stdout W ⅲ dows で働かない理由 前節の冒頭で、 mini-relaytcp は Windows では動か GET / HTTP/I . 0 $ telnet localhost 8000 $ mini—relaytcp ・ pI www.perl. org : 80 で次のように入力したとしよう。 ないと述べたが、具イ勺には以下のようになる。 Cygwin 8000 & GET / HTTP/I . 0 $ perl micro-relaytcp. P1材 イルか表示される。 に入力す川ま、 http://www.perl.com/の HTML ファ う。 UNIX では、このプログラムを実行して以下のよう ラムを、 micro-relaytcp. pl という名前で保存したとしよ 2 のプログラムが載っているのをみつけた。このプログ いろいろ調べていたら、 perldoc perlfaq8" にリスト nucro-relaytcp こうすると、いくら待っても応答は返ってこない。 NOTE: As of the 5.8.0 release, fork() emulation has いる " と書いてある。 fork" の冒頭には、 、 fork() 工ミュレーションは成熟して はすはないと思ったのである。それに、 perldoc perl- Windows というポピュラーなプラットホームで動かない ようなー殳的な文書に載っている基本的なプログラムが、 私にとって、これは意外なことだった。 perlfaq8 の 一方、 Windows では何も表示されない。 64 considerably matured. ActivePerI の伺ブ属文書を見ても、 fork について、、こう いう場合は動かない " という明示的な言当はないようだっ リスト 2 のプログラムの重川乍をもうすこし詳しく知るた めに、リスト 3 のように変更してみた。 これを Windows で実行すると以下のようになった。ま ず、 GET / HTTP/I . 0 と入力するとすぐに、 # # parent read と表示される。しかし、続けて表示されるはすの、 # # parent wrote は出力されない。次に空行を入力すると、すぐには反応が ないが、しばらくすると、 # # parent read # # parent wrote と表示される。しかし、子プロセスからの出力はない。子 プロセスは $ handle がまったく読めないようである。 こまでやったところで、さきほど引用した、 perldoc perlfork" の冒頭に続く文章が気になった。 However, there are still a few known bugs and differences om real fork() that might affect you. See the ” BUGS ” and ” CAVEATS AND LIMITA- TIONS ” sections below. ( しかしながら、既知のバグや 本物の fork() との違いがまだ多少残っており、その景 を受けることがある。以下の「バグ」「注意事項と制限」の 節を参照せよ ) UNIX MAGAZINE 2003.11
PerI 活用のヒント 今津英世 relaytcp ( 2 ) 前回に続き、 relaytcp をとりあげる。 簡単にこれまでのおさらいをしておこう。 relaytcp は、 TCP/IP の通信を中継 / 言するプログラムである。この 連載の趣旨からもちろん Perl で当されており、 UNIX 上の Perl 5.6 / 5.8 および Windows 上の ActivePerI 5.8 で動作する 。ここでいう UNIX は、各種の Linux 、 BSD 、 Solaris などの商用 OS といった UNIX ー殳を指 している。記事中て示す操作は UNIX のコマンド行での ものだが、 Windows 上の Cygwin でもほは 1 司じ操作が おこなえる。 本文中の、 perldoc perlipc を参照 " といった言当は、 perldoc perlipc" をコマンド行で実行した際に表示され る文書を指している。 Cygwin で ActivePerl を使って いる場合は、 perldoc. bat perlipc" と入力する必要が ある。 relaytcp を含め、この連載でとりあげるプログラムは 以下の URL で公開している。 ・ http://www.geocities.co.jp/SiIiconValley-Oakland / 4080 / relaytcp の配布ファイルには使い方を書いた podl ファ イルも含まれているので、則回の記事を読んでいない人は 目をとおしておいてほしい。 前回は relaytcp の使い方を説明した。今回は、 re- laytcp のプログラムコードを解説し、拡張方法を紹介す る予定だった。しかし、手始めに relaytcp の簡略版につ いて解説したところで甲寺間切れとなってしまった。その 1 plain 01d documentation の略で、 Perl 本一本やモジュールのマニュ アルなどの書ツに , pod2man や pod2html コマンドなどで男 ) 形式に 変換してから々パや印刷をおこなう。 UNIX MAGAZINE 2003.11 結果、今回は、、 UNIX と Windows 上での perl による ネットワーク・プログラミング入門 " ヾる内容になっ た。また、 relaytcp に若干の変更点があるので、それを 説明してから本題に入る。 relaytcp の変更点 私は relaytcp をもう何年も使っているが、連載でとり あげるにあたってかなり改善、拡張しており、それは現 在も進行中である。なぜそうなるのかというと、プログラ ムについての文書を書くと、それまて気づかなかった不具 合や改善すべき点がみつかるからである。こういった経験 は、多くの人がもっていると思う。私はこれを、「文書化 は人のためならず」 2 といって肝に銘しているつもりだが、 なかなか実践できていない。 前回からの変更点はほとんどカ去張で、具ー純勺には以下 のオフションが追加されている。 ー help コマンド行オプションの一覧を表示して終了する。 ー no] relayfork relaytcp は、原則として、 ・クライアント→中継先 ・中継先→クライアント の各方向の通信を fork により別のプロセスて処理する。 -norelayfork オプションを指定すると、 fork の代わ りに select を使い、 1 つのプロセスで双方向の通信を処 理する。 Windows では双方向の通信を fork により別 2 この、、ことわざもどき " ( 等できない人は、「情けは人のためならす」の 意床を辞書などて謌・ヾてはしい。 57
連載 / pe 日活用のヒント - ② ので、言求ファイルか誰でも読める状態になることが多 かった。 Windows ではファイルやフォルダのアクセ ス権限の管理が UNIX とは異なるため、 -umask オ フションを指定してもほとんど意味はない。 ー umask 0200 " と指定するとファイルか第翹 ( り専用で作成される ことくらいである。詳しくは、、、 ActivePerl Windows Quirks" をキーワードにインターネットで検索し、みつ かったページを参照してほしい。 拡張以外の変更点として、前回の時点では、、 -myport 20 月 T " だったオフションが、、一 localport PORT" に変 わったことか挙げられる。変更の理由は、 localport のほ うがオプション名として適切だと思ったからである。た だし、 -myport オプションがなくなったわけではなく、 -localport オフションの別名として実装されており、前 回の操作例はすべてそのまま動作する。 mini- relaytcp の ( 擬似 ) プロセスて処理することはできないので、 自 重舶勺に -norelayfork カ甘旨定された状態になる。 no]threads -threads オフションを指定すると、クライアントごと にスレッドを生成して処理をおこなう。また、自動的 に—norelayfork オプションカ甘旨定された状態になる。 これは、—[no]relayfork オフションが景グをえるの は個々のクライアントの処理であり、個々のクライア ントを処理しているスレッドが fork するのはおかしい からである。 f 。 rk すると、複数のスレッドをもっプロ セス全体のコピーが作成されてしまう。また、マルチス レッドと fork を組み合わせることは、プラットホーム によっては Perl インタープリタの実装か想定していな いこともあるだろう 3 -threads オフションを指定しないと、クライアントご とに fork して別のプロセス ( あるいは擬似プロセス ) て処理する。 スレッドの処理には PerI 5.6 から導入された ithreads を使っており、使用する PerI インタープリタが対応し relaytcp は全体で 500 行程度なのでそれほど大きく ている必要がある。 PerI 5.6 / 5.8 でもビノレドガ去によっ ないが、ネットワーク・プログラミングの経験がないと ては ithreads を使えないことがある。 ithreads に対応 理解するのは容易ではないと思う。そこで、 relaytcp の しているかを調べるには、以下のコマンド行を実行すれ フログラムコードの解説に先立ち、 relaytcp の核心の部 はよい。 分だけを含む小さなプログラムの動作を説明しよう。この プログラムは mini-relaytcp と呼ぶことにする。以下で $ perl -Mthreads -e は、 mini-relaytcp を例に、 relaytcp の核心である TCP 工ラーが発生しなけれは ithreads に対応している。 通信の中継を Perl でどのようにフログラミングするのか Perl インタープリタが ithreads に対応していなくて について説明する。 mini-relaytcp は relaytcp よりか も、 -threads オフションを指定しなけれは relaytcp なり小さいので、いろいろと試してみる際にも便利だろ の実行に支障はなく、このオフションが使えないこと を除いて制限もない。 mini-relaytcp のコードをリスト 1 に小す。いうまで —umask UMASK もないことだが、実行する際には 1 行目を竟に合わせて 己録ファイルなどを作成する際の umask 値を指定す 書き換える必要がある。また、このプログラムは UNIX る。デフォルトは 077 で、 relaytcp を実行したユー 上では動作するが、 Windows 上では動作しない。動作し サーだけか第当求ファイルを読むことができる。言求ファ ない理山や、 Windows で動くようにする方法については イルにはパスワードなどのデリケートなデータカ当求さ 後する。 れることもあるので、このようにしている。 mini-relaytcp の使い方は以下のとおりである。 前回の時点では umask については何もしていなかった mini-relaytcp TARGET—HOST : TARGET—PORT LOCAL-PORT 3 perldoc perlthrtut" には、、 Thinking of mixing fork() and threads? Please lie down and wait until the feeling passes mini-relaytcp の重川は、 relaytcp を下記のように起 (fork() とスレッドを混ぜようと考えているなら、ひ凵恥みして、そう 動した場合と同しである ( 誌面の都合ー E 、て折り返して いう癶分か収まるのを待ってはしい ) " という記がある。 二二ロ 58 UNIX MAGAZINE 2003.11
連載 / Pe 日活用のヒントー② リスト 3 サンカレ・プログラム彦 use IO: :Socket; $handle IO : :Socket : : INET—>new( 'www.perl. com : 80 ) ) Ⅱ die "can 't connect to port 80 0 www ・ per1. com: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $handle—>autoflush(l) ; if (fork()) { print STDERR " # # child wrote. \ Ⅱ " print ; print STDERR " # # child read. \ Ⅱ " while ( く $handle> ) { else { print STDERR " # # parent wrote . \ Ⅱ " print ; p て土 t STDERR " # # parent read. \n" while ( く STDIN> ) { select ($handle) ; exit 0 ; close $handle ; 当初、私はこの部分をあまり気に留めなかった。、、多 ことがある " という表現だったからである。しかし、 月、 「 BUGS 」の節には以下のような言当がある。 ln certain cases, the OS-level handles created by the pipe(), socket() , and accept ( ) operators are apparently not duplicated accurately in pseudo- processes. ThiS only happens in some situations, but where it does happen, it may result ⅱ 1 dead- locks between the read and write ends Of pipe han- dles, or inability tO send or receive data across accept ( ) 演算子 socket handles. (pipe() 、 socket() 、 で作られた OS レベルのハンドルは、場合によっては擬 似プロセス 4 に正確に複製されないようである。これは特 定の状況だけで起こるが、起こった場合はパイフ。ハンドル の読込み側と書込み側のあいだでデッドロックが生じた り、ソケットハンドルを介したデータ送信や受信カ坏能に なることがある ) リスト 1 のプログラムが Windows 上で動かないのは これが原因だろう。つまり、 fork を使って親プロセスが 一方の転送を、子プロセスか逆方向の転送をおこなうプロ 4 Windows などで Perl の fork か実行された場合は、別のプロセスが 作られたようにみせかけるだけなので、、擬似プロセス " という用語が使 われている。 UNIX MAGAZINE 2003.11 グラムは動かないということである。 fork を使わない双方向転送 fork カ硬えない以 E 、 1 つのプロセスで双方 ] 転送をお こなうしかない。単純に考えれは以下の処理を繰り返せば よいように思える。 1. クライアント→中継先のデータ転送 2. 中継先→クライアントのデータ転送 ただし、どちら向きのデータ転送も、 I/O 待ちが発生 しないときに限っておこなう必要がある。そうでないと、 たとえは 1 の処理でプログラムが待たされているあいだ は、 2 の処理がおこなわれすに滞るといったことか起きて しまう。 UNIX には、このような処理を実装する仕組みとして select システムコールがあり、 Perl の糸Ⅲムみ関数 select で呼び出せる。これを使うと、複数のファイルやソケット のなかで、現在待たすに言ムみ / 書込みが可能なものを知 ることかて、きる。 リスト 4 は、 select を使ってリスト 1 を書き直したプロ グラムである。このプログラムは Windows でも UNIX でも同様に動作する。 UNIX 上での動作はリスト 1 の場 65
NEWS StarOffice 7 米 Sun Microsystems は、オフィス・ アプリケーション「 StarOffce 7 」 ( 国内で の名称は StarSuite) の販売を開始した。 ワードプロセッサ / スプレッドシート / プレゼンテーション / グラフィックス / DB などの機能をもつ。新バージョンで は、 MS Office 文書との互換性を強化し、 PDF や Macromedia Flash ファイルへ の出力、マクロの記録、集中管理ツール ( 工ンタープライズ版のみ ) などの機能を 追加。アジア言語用に、ワードプロセッ サ / スプレッドシートの縦書き機能を強化 し、テキストのグリッド・レイアウト機 能を追加。デスクトップ環境 Sun Java •Sun ・ LEGATO NetWorker7. OL 日本語版 米 LEGATO Systems (Tel 03 ー 5333 ー 6651 : レガートシステムズ ) は、バック アップ・ソフトウェア「 NetWorker 7.0 L 」日本語版の販売を開始した。 バックアップ・データを HD に記録する DiskBackup オプションを拡張し、 クアップ先の HD に対する複数の読出し / 書込みを同時に実行できる。バックアッ •Sun Java 関連ソフトウェアの系列を整理 米 Sun Microsystems は、 Java 関連 ソフトウェアを 6 つの系列に整理・統合す る「 Sun Java System 」を発表した。 新しい Java システムは以下のとおり。 ◆ Sun J ava Enterpri se System 企業ネットワーク用のソフトウェア / サーヒ、ス。 Java System ( 旧称 Sun ONE) Application Server 、同 Portal Server 、 同 Directory Server などが含まれ、ソフ トウェアへの早期アクセス・プログラム Sun Software Express が利用できる。 価格は年間 100 ドル ( 従業員 1 人あた ◆ Sun J ava Desk top System StarOff1ce 7 、 Mozilla 、電子メール / 共同作業用ツール、 ReaIONE 、 Macro- media Flash などが含まれるデスクトッ フ。環境。ウイルス対策などを導入済み。 価格は 100 ドル ( 1 マシンあたり ) 。 Sun Java Enterprise System のアドオンと して使用する場合は 50 ドル ( 従業員 1 人 あたり ) 。 ◆ Sun Java StudiO Enterprise 開発者用の統合ツールセット。統合開 発環境、コネクタヒ、ルダー、プラグイン、 Sun Java Enterprise System のランタ ・ RENESAS SoC 開発用フロトタイビング・システム ルネサステクノロジ (Tel 042 ー 320 ー 7300 ) は、 SoC (System on Chip) 開発 用プロトタイピング・システム「 VirtuaI Turbo 」の Linux 版を販売する。 FPGA モジュール「 LogicBench 」を 18 最大 2 つ組み込める PCI ポード。 Linux 上の市販シミュレータとの連動により、数 百万ゲート規模の SoC の論理シミュレー ションが可能。 SoC の論理やプログラム の一部をハードウェア的に実現する機能 Desktop System に標準で含まれる。 対応 OS は、 SoIaris 8 以上、 Linux ( カ ーネル 2.2.13 以ーい、 Windows 98 / Me 、 Windows NT/2000/XPo 価格はリテール版が 79.95 ドル。国内で は、リテール版をソースネクストが、エン タープライズ版をサン・マイクロシステム ズの販売代理店が販売するほか、 OEM 版 がターポリナックスの Linux ディストリ ピューションに添付される。リテール版 の価格は 9 , 800 円。 プ対象のシステムとして、 ltanium 対応 の Linux 、 Mac OS X 、 Windows Serv- er 2003 をサポート。 SAN/NAS 環境で のテーブドライプ共有機能を強化。 対応 OS は、 Solaris 、 Windowso 価格は 218 , 000 円から。 イムが含まれる。 価格は 5 ドル ( 従業員 1 人あたり。 Sun Java Enterprise System のアドオンと して販売 ) 。 ◆ NI 管理者用のプラットホーム。ストレー ジ、サーバー、プレードサーバー、アプリ ケーションの仮想化、プロビジョニング が可能。 ◆ Sun Java Mobility System 携帯電話、 PDA などの Java 対 ) 秀帯 機器をサポートする統合プラットホーム。 ◆ Sun Java Card System Java Card で電子商取引やサーピス配 信をおこなうための個人認証サービス対 応フ。ラットホーム。 を備え、シミュレーション速度をソフト UNIX MAGAZINE 2003.11 300 , 000 円。出荷は 12 月。 版を Linux に対応させるソフトウェアは 価格は 470 万円から。既存の Windows Hat Linux 7.2 。 対応ディストリビューションは Red ・一ン、 0 できる。 Linux 対応の API を用音 ウェアのみの場合の 10 ~ 100 倍に高速化