Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::SSL::SSLServerクラス

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#listenOpenSSL::SSL::SSLServer#accept は内部で svr で渡されたオブジェクトの TCPServer#listenTCPServer#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

ラップしている TCPServerTCPServer#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 オブジェクトを返します。

class OpenSSL::SSL::SSLServer