class OpenSSL::SSL::SSLServer + OpenSSL::SSL::SocketForwarder
クラスの継承リスト: OpenSSL::SSL::SSLServer < OpenSSL::SSL::SocketForwarder < Object < Kernel < BasicObject
要約
SSL サーバーのためのクラス。
TCPServer をラップするクラスで、TCPServer で接続した ソケットを OpenSSL::SSL::SSLSocket でラップする機能を持ちます。 おおよそ TCPServer と同様のメソッドを持ちます。
基本的には SSL サーバを簡単に実装するためのクラスであり、 これを利用せずとも SSL サーバを実装することは可能です。
以下はクライアントからの入力を標準出力に出力するだけのサーバです。
require 'socket' require 'openssl' include OpenSSL ctx = SSL::SSLContext.new() ctx.cert = X509::Certificate.new(File.read('cert.pem')) ctx.key = PKey::RSA.new(File.read('privkey.pem')) svr = TCPServer.new(2007) serv = SSL::SSLServer.new(svr, ctx) loop do while soc = serv.accept puts soc.read end end
特異メソッド
new(svr, ctx) -> OpenSSL::SSL::SSLServer
-
TCPServer オブジェクトをラップする SSLServer オブジェクトを生成します。
svr にはラップするTCPServer オブジェクトを、 ctx には SSL サーバが用いる OpenSSL::SSL::SSLContext オブジェクトを生成します。
OpenSSL::SSL::SSLServer#listen や OpenSSL::SSL::SSLServer#accept は内部で svr で渡されたオブジェクトの TCPServer#listen や TCPServer#accept を呼び出します。
- [PARAM] svr:
- 利用する TCPServer オブジェクト
- [PARAM] ctx:
- SSL サーバとして用いる OpenSSL::SSL::SSLContext オブジェクト
インスタンスメソッド
accept -> OpenSSL::SSL::SSLSocket
-
クライアントからの接続を受け付け、接続した SSLSocket オブジェクトを返します。
OpenSSL::SSL::SSLServer#start_immediately が真ならば、 SSLSocket#accept を呼び TLS/SSL ハンドシェイクを実行してから SSLSocket オブジェクトを返します。
addr -> Array
-
ラップされているソケットの接続情報を返します。
IPSocket#addr と同様です。
close -> nil
-
内部のサーバソケットを閉じます。
closed? -> bool
-
ラップされているソケットが close していたら true を返します。
do_not_reverse_lookup=(bool)
-
真を渡すとアドレスからホスト名への逆引きを行わなくなります。
BasicSocket#do_not_reverse_lookup と同様です。
- [PARAM] bool:
- 真で逆引きを抑制します
fcntl(cmd, arg=0) -> Integer
-
ラップされているソケットに対してシステムコール fcntl を実行します。
IO#fcntl と同様です。
- [PARAM] cmd:
- IO に対するコマンドを、添付ライブラリ fcntl が提供している定数で指定します。
- [PARAM] arg:
- cmd に対する引数を整数、文字列、booleanのいずれかで指定します。
- [EXCEPTION] Errno::EXXX:
- fcntl の実行に失敗した場合に発生します。
- [EXCEPTION] IOError:
- 既に close されている場合に発生します。
getsockopt(level, optname) -> String
-
ラップされているソケットのオプションを設定します。
BasicSocket#getsockopt と同様です。
- [PARAM] level:
- getsockopt(2) の 第二引数のlevel に相当する整数を指定します
- [PARAM] optname:
- getsockopt(2) の 第三引数のoption_name に相当する整数を指定します
listen(backlog=5) -> 0
-
ラップしている TCPServer の TCPServer#listen を呼びだします。
通常は TCPServer の初期化時に listen が呼びだされるため 呼ぶ必要はないはずです。
- [PARAM] backlog:
- クライアントからの接続要求を保留できる数
- [EXCEPTION] Errno::EXXX:
- listen(2) が失敗すれば 例外 Errno::EXXX が発生します。
peeraddr -> Array
-
ラップされているソケットの接続先相手の情報を返します。
IPSocket#peeraddr と同様です。
setsockopt(level, optname, optval) -> 0
-
ラップされているソケットのオプションを設定します。
BasicSocket#setsockopt と同様です。
- [PARAM] level:
- setsockopt(2) の level に相当する整数を指定します
- [PARAM] optname:
- setsockopt(2) の option_name に相当する整数を指定します
- [PARAM] optval:
- 設定される値を文字列で指定します。
- [EXCEPTION] Errno::EXXX:
- オプションの設定に失敗した場合発生します。
shutdown(how=Socket::SHUT_RDWR) -> 0
-
ソケットの以降の接続を終了させます。
詳しくは BasicSocket#shutdown を参照してください。
- [PARAM] how:
- 接続の終了の仕方を Socket::SHUT_RD, Socket::SHUT_WR, Socket::SHUT_RDWR などで指定します。
start_immediately -> bool
-
OpenSSL::SSL::SSLServer#accept で accept したらすぐに TLS/SSL ハンドシェイクを実行するかどうかを返します。
[SEE_ALSO] OpenSSL::SSL::SSLServer#start_immediately=
start_immediately=(bool)
-
OpenSSL::SSL::SSLServer#accept で accept したらすぐに TLS/SSL ハンドシェイクを実行するかどうかを設定します。
これを真に設定した場合は、OpenSSL::SSL::SSLServer#accept で 接続したソケットに対し OpenSSL::SSL::SSLSocket#accept を 呼び、ハンドシェイクを実行します。
デフォルトでは true です。
- [PARAM] bool:
- 設定する真偽値。
[SEE_ALSO] OpenSSL::SSL::SSLServer#start_immediately
to_io -> TCPServer
-
ラップしている TCPServer オブジェクトを返します。