Method: Async::IO::SSLSocket.connect

Defined in:
lib/async/io/ssl_socket.rb

.connect(socket, context, hostname = nil, &block) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/async/io/ssl_socket.rb', line 38

def self.connect(socket, context, hostname = nil, &block)
  client = self.new(socket, context)
  
  # Used for SNI:
  if hostname
    client.hostname = hostname
  end
  
  begin
    client.connect
  rescue
    # If the connection fails (e.g. certificates are invalid), the caller never sees the socket, so we close it and raise the exception up the chain.
    client.close
    
    raise
  end
  
  return client unless block_given?
  
  begin
    yield client
  ensure
    client.close
  end
end