class Thrift::SSLServerSocket
Attributes
Public Class Methods
Source
# File lib/thrift/transport/ssl_server_socket.rb 27 def initialize(host_or_port, port = nil, ssl_context = nil, client_timeout: DEFAULT_CLIENT_TIMEOUT) 28 super(host_or_port, port, client_timeout: client_timeout) 29 @ssl_context = ssl_context 30 end
Calls superclass method
Thrift::ServerSocket::new
Public Instance Methods
Source
# File lib/thrift/transport/ssl_server_socket.rb 41 def accept 42 return if @handle.nil? 43 44 transport = nil 45 ssl_socket = @handle.accept 46 deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + @client_timeout unless @client_timeout.nil? || @client_timeout == 0 47 ssl_socket.to_io.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1) 48 accept_ssl_socket(ssl_socket, deadline) 49 50 transport = Socket.new.tap do |accepted_transport| 51 accepted_transport.timeout = @client_timeout 52 accepted_transport.handle = ssl_socket 53 end 54 ensure 55 # Thread#kill leaves $! nil, but marks the thread as aborting. 56 close_accepted_socket(ssl_socket) if transport.nil? || $! || Thread.current.status == "aborting" 57 end
Source
# File lib/thrift/transport/ssl_server_socket.rb 34 def listen 35 tcp_server = TCPServer.new(@host, @port) 36 @handle = OpenSSL::SSL::SSLServer.new(tcp_server, @ssl_context).tap do |server| 37 server.start_immediately = false 38 end 39 end
Source
# File lib/thrift/transport/ssl_server_socket.rb 59 def to_s 60 "ssl(#{super})" 61 end
Private Instance Methods
Source
# File lib/thrift/transport/ssl_server_socket.rb 65 def accept_ssl_socket(ssl_socket, deadline) 66 return ssl_socket.accept unless deadline 67 68 loop do 69 case ssl_socket.accept_nonblock(exception: false) 70 when ssl_socket 71 return ssl_socket 72 when :wait_readable 73 wait_for_handshake(ssl_socket, :read, deadline) 74 when :wait_writable 75 wait_for_handshake(ssl_socket, :write, deadline) 76 else 77 raise TransportException.new(TransportException::NOT_OPEN, "SSL server socket: Unexpected TLS handshake result") 78 end 79 end 80 end
Source
# File lib/thrift/transport/ssl_server_socket.rb 96 def close_accepted_socket(ssl_socket) 97 ssl_socket&.close 98 rescue StandardError 99 nil 100 end
Source
# File lib/thrift/transport/ssl_server_socket.rb 82 def wait_for_handshake(ssl_socket, direction, deadline) 83 remaining = deadline - Process.clock_gettime(Process::CLOCK_MONOTONIC) 84 ready = if remaining > 0 85 if direction == :read 86 ssl_socket.to_io.wait_readable(remaining) 87 else 88 ssl_socket.to_io.wait_writable(remaining) 89 end 90 end 91 return if ready 92 93 raise OpenSSL::SSL::SSLError, "SSL server socket: Timed out accepting TLS connection" 94 end