class OpenSSL::SSL::SSLServer

要約

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

目次

特異メソッド
インスタンスメソッド

継承しているメソッド

OpenSSL::SSL::SocketForwarderから継承しているメソッド

特異メソッド

new(svr, ctx) -> OpenSSL::SSL::SSLServer[permalink][rdoc]

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[permalink][rdoc]

クライアントからの接続を受け付け、接続した SSLSocket オブジェクトを返します。

OpenSSL::SSL::SSLServer#start_immediately が真ならば、 SSLSocket#accept を呼び TLS/SSL ハンドシェイクを実行してから SSLSocket オブジェクトを返します。

close -> nil[permalink][rdoc]

内部のサーバソケットを閉じます。

listen(backlog=5) -> 0[permalink][rdoc]

ラップしている TCPServerTCPServer#listen を呼びだします。

通常は TCPServer の初期化時に listen が呼びだされるため呼ぶ必要はないはずです。

[PARAM] backlog:
クライアントからの接続要求を保留できる数
[EXCEPTION] Errno::EXXX:
listen(2) が失敗すれば 例外 Errno::EXXX が発生します。
shutdown(how=Socket::SHUT_RDWR) -> 0[permalink][rdoc]

ソケットの以降の接続を終了させます。

詳しくは BasicSocket#shutdown を参照してください。

[PARAM] how:
接続の終了の仕方を Socket::SHUT_RD, Socket::SHUT_WR, Socket::SHUT_RDWR などで指定します。
start_immediately -> bool[permalink][rdoc]

OpenSSL::SSL::SSLServer#accept で accept したらすぐに TLS/SSL ハンドシェイクを実行するかどうかを返します。

[SEE_ALSO] OpenSSL::SSL::SSLServer#start_immediately=

start_immediately=(bool)[permalink][rdoc]

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[permalink][rdoc]

ラップしている TCPServer オブジェクトを返します。