Class: OpenSSL::SSL::SSLServer

Inherits:
Object
  • Object
show all
Includes:
SocketForwarder
Defined in:
ext/openssl/lib/openssl/ssl.rb

Overview

SSLServer represents a TCP/IP server socket with Secure Sockets Layer.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from SocketForwarder

#addr, #close_on_exec=, #close_on_exec?, #closed?, #do_not_reverse_lookup=, #fcntl, #fileno, #getsockopt, #local_address, #peeraddr, #remote_address, #setsockopt, #timeout, #timeout=, #wait, #wait_readable, #wait_writable

Constructor Details

#initialize(svr, ctx) ⇒ SSLServer

Creates a new instance of SSLServer.

  • srv is an instance of TCPServer.

  • ctx is an instance of OpenSSL::SSL::SSLContext.



529
530
531
532
533
534
535
536
537
538
539
# File 'ext/openssl/lib/openssl/ssl.rb', line 529

def initialize(svr, ctx)
  @svr = svr
  @ctx = ctx
  unless ctx.session_id_context
    # see #6137 - session id may not exceed 32 bytes
    prng = ::Random.new($0.hash)
    session_id = prng.bytes(16).unpack1('H*')
    @ctx.session_id_context = session_id
  end
  @start_immediately = true
end

Instance Attribute Details

#start_immediatelyObject

When true then #accept works exactly the same as TCPServer#accept



524
525
526
# File 'ext/openssl/lib/openssl/ssl.rb', line 524

def start_immediately
  @start_immediately
end

Instance Method Details

#acceptObject

Works similar to TCPServer#accept.



557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
# File 'ext/openssl/lib/openssl/ssl.rb', line 557

def accept
  # Socket#accept returns [socket, addrinfo].
  # TCPServer#accept returns a socket.
  # The following comma strips addrinfo.
  sock, = @svr.accept
  begin
    ssl = OpenSSL::SSL::SSLSocket.new(sock, @ctx)
    ssl.sync_close = true
    ssl.accept if @start_immediately
    ssl
  rescue Exception => ex
    if ssl
      ssl.close
    else
      sock.close
    end
    raise ex
  end
end

#closeObject

See IO#close for details.



578
579
580
# File 'ext/openssl/lib/openssl/ssl.rb', line 578

def close
  @svr.close
end

#listen(backlog = Socket::SOMAXCONN) ⇒ Object

See TCPServer#listen for details.



547
548
549
# File 'ext/openssl/lib/openssl/ssl.rb', line 547

def listen(backlog=Socket::SOMAXCONN)
  @svr.listen(backlog)
end

#shutdown(how = Socket::SHUT_RDWR) ⇒ Object

See BasicSocket#shutdown for details.



552
553
554
# File 'ext/openssl/lib/openssl/ssl.rb', line 552

def shutdown(how=Socket::SHUT_RDWR)
  @svr.shutdown(how)
end

#to_ioObject

Returns the TCPServer passed to the SSLServer when initialized.



542
543
544
# File 'ext/openssl/lib/openssl/ssl.rb', line 542

def to_io
  @svr
end