Sha256: 59cd90c08ff3c6b76de1c4bccbd0b809fa00a2076c00bd7c639ef110d6e34e7e

Contents?: true

Size: 1.09 KB

Versions: 3

Compression:

Stored size: 1.09 KB

Contents

require 'openssl'

module Celluloid
  module IO
    # SSLSocket with Celluloid::IO support
    class SSLSocket < Stream
      extend Forwardable

      def_delegators :@socket,
        :read_nonblock,
        :write_nonblock,
        :close,
        :closed?,
        :cert,
        :cipher,
        :client_ca,
        :peeraddr,
        :peer_cert,
        :peer_cert_chain,
        :post_connection_check,
        :verify_result,
        :sync_close=

      def initialize(io, ctx = OpenSSL::SSL::SSLContext.new)
        super()
        @context = ctx
        @socket = OpenSSL::SSL::SSLSocket.new(::IO.try_convert(io), @context)
        @socket.sync_close = true if @socket.respond_to?(:sync_close=)
      end

      def connect
        @socket.connect_nonblock
        self
      rescue ::IO::WaitReadable
        wait_readable
        retry
      end

      def accept
        @socket.accept_nonblock
        self
      rescue ::IO::WaitReadable
        wait_readable
        retry
      rescue ::IO::WaitWritable
        wait_writable
        retry
      end

      def to_io; @socket; end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
celluloid-io-0.17.1 lib/celluloid/io/ssl_socket.rb
celluloid-io-0.17.0 lib/celluloid/io/ssl_socket.rb
celluloid-io-0.16.5.pre0 lib/celluloid/io/ssl_socket.rb