ktats****@users*****
ktats****@users*****
2009年 12月 21日 (月) 13:09:18 JST
Index: docs/modules/Net-SSLeay-1.20/SSLeay/Handle.pod diff -u /dev/null docs/modules/Net-SSLeay-1.20/SSLeay/Handle.pod:1.1 --- /dev/null Mon Dec 21 13:09:18 2009 +++ docs/modules/Net-SSLeay-1.20/SSLeay/Handle.pod Mon Dec 21 13:09:18 2009 @@ -0,0 +1,132 @@ +=head1 名前 + +Net::SSLeay::Handle - SSL (HTTPS)ソケットを標準のファイルハンドルとして +扱わせるPerlモジュール + +=head1 概要 + + use Net::SSLeay::Handle qw/shutdown/; + my ($host, $port) = ("localhost", 443); + + tie(*SSL, "Net::SSLeay::Handle", $host, $port); + + print SSL "GET / HTTP/1.0\r\n"; + shutdown(\*SSL, 1); + print while (<SSL>); + close SSL; + + +=head1 説明 + +Net::SSLeay::HandleはHTTPS webページを"昔ながらの"ファイルハンドルを +使って以下のように、リクエストしたり、受け取ることを可能にします: + + print SSL "GET / HTTP/1.0\r\n"; + +そして + + print while (<SSL>); + +shutdownルーチンをエクスポートすると、あなたのプログラムに追加する +必要がある特別なコードは、以下のようなtie関数だけになります: + + my $socket; + if ($scheme eq "https") { + tie(*S2, "Net::SSLeay::Handle", host, $port); + $socket = \*S2; + else { + $socket = Net::SSLeay::Handle->make_socket(host, $port); + } + print $socket $request_headers; + ... + +=head2 既存のソケットを利用する + +このモジュールを作った動機の一つは、ソケットを作るコードが重複する +ことを避けることでした(そのほとんどはエラーの取り扱いになります)。 +上記の$hostと$portが渡されるところでtie()を呼び出すことは、 +便宜上、テストのために提供されています。正しいホストとポートに +接続されたソケットS1を既に持っているのであれば、以下のように +することができます: + + my $socket \*S1; + if ($scheme eq "https") { + tie(*S2, "Net::SSLeay::Handle", $socket); + $socket = \*S2; + } + my $last_sel = select($socket); $| = 1; select($last_sel); + print $socket $request_headers; + ... + +注意: 私が知る限り、tie()関数ではグロブの取り扱いには注意しなければ +なりません。最初のパラメータはグロブ(*SOMETHING)でなければなりません。 +そして最後のパラメータはグロブへのリファレンス(\*SOMETHING_ELSE)あるいは +(上記の例のように)グロブへのリファレンスが代入されたスカラーでなければ +なりません。 + +また2つのグロブは違うものでなければなりません。私が同じグロブを使おうと +したときには、コアダンプになりました。 + +=head2 エクスポート(EXPORT) + +デフォルトでは何もありません。 + +shutodown()関数をエクスポートすることができます。 + +SSLソケットをシャットダウンするためには、shutdown()をエスクポートするか、 +完全に修飾されたNet::SSLeay::Handle::shutdown()関数を使うことを提案します。 +SSLと非SSLソケットを区別し、正しいことを行うのに十分スマートです。 + +=head1 使用例 + + use Net::SSLeay::Handle qw/shutdown/; + my ($host, $port) = ("localhost", 443); + + tie(*SSL, "Net::SSLeay::Handle", $host, $port); + + print SSL "GET / HTTP/1.0\r\n"; + shutdown(\*SSL, 1); + print while (<SSL>); + close SSL; + +=head1 やるべきこと(TODO) + +よりよいエラーの取り扱い、コールバックルーチン? + +=head1 注意 + +ファイルハンドルを使おうとすることは少しトリッキーです(少なくとも私にとっては)。 + +tie()への最初のパラメータはグロブ(*SOMETHING)で、最後のパラメータは +グロブへのリファレンス(\*SOMETHING_ELSE)か、グロブへのリファレンスが +代入されたスカラー($s = \*SOMETHING_ELSE)でなければなりません。 +また2つのグロブは違うものでなければなりません。私が同じグロブを使おうと +したときには、コアダンプになりました。 + +ファイルヘッド1によりキーが付けられたハッシュのハッシュを作ることにより、 +このモジュールにより作成されたグロブに属性を関連付けることができました +(上記の*SSLのように)。 + +古いperlのサポートは100%ではないかもしれません。障害時には5.6.0以上を +お試しください。 + +=head1 変更点 + +Net-SSLeay-Handle-0.50/Changesファイルをご覧ください。 + +=head1 既知のバグ + +Perlバージョンv5.6以前で、このモジュールにあなた用のソケットを作る +よう命令すると、少しメモリリークを起こします。Perlをアップグレードするか、 +あなた自身でソケットを作成してください。そのリークは、これらの古い +バージョンのPerlに同時に1つ以上のハンドルにアクセスさせるために +作られます。 + +=head1 作者 + +Jim Bowlin jbowl****@linkl***** + +=head1 参考資料 + +Net::SSLeay, perl(1), http://openssl.org/ +