Class Mongo::SSLSocket
In: lib/mongo/util/ssl_socket.rb
Parent: Object

A basic wrapper over Ruby‘s SSLSocket that initiates a TCP connection over SSL and then provides an basic interface mirroring Ruby‘s TCPSocket, vis., TCPSocket#send and TCPSocket#read.

Methods

close   closed?   connect   new   read   send   setsockopt  

Attributes

pool  [RW] 

Public Class methods

[Source]

# File lib/mongo/util/ssl_socket.rb, line 14
    def initialize(host, port, op_timeout=nil, connect_timeout=nil)
      @op_timeout = op_timeout
      @connect_timeout = connect_timeout

      @socket = ::TCPSocket.new(host, port)
      @socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)

      @ssl = OpenSSL::SSL::SSLSocket.new(@socket)
      @ssl.sync_close = true
      
      connect
    end

Public Instance methods

[Source]

# File lib/mongo/util/ssl_socket.rb, line 55
    def close
      @ssl.close
    end

[Source]

# File lib/mongo/util/ssl_socket.rb, line 59
    def closed?
      @ssl.closed?
    end

[Source]

# File lib/mongo/util/ssl_socket.rb, line 27
    def connect
      if @connect_timeout
        Timeout::timeout(@connect_timeout, ConnectionTimeoutError) do
          @ssl.connect
        end
      else
        @ssl.connect
      end
    end

[Source]

# File lib/mongo/util/ssl_socket.rb, line 41
    def read(length, buffer)
      if @op_timeout
        Timeout::timeout(@op_timeout, OperationTimeout) do
          @ssl.sysread(length, buffer)
        end
      else
        @ssl.sysread(length, buffer)
      end 
    end

[Source]

# File lib/mongo/util/ssl_socket.rb, line 37
    def send(data)
      @ssl.syswrite(data)
    end

[Source]

# File lib/mongo/util/ssl_socket.rb, line 51
    def setsockopt(key, value, n)
      @ssl.setsockopt(key, value, n)
    end

[Validate]