Sha256: 550af2153067a5c0f9313f1e5fc79aa51744fedb3eee03f0df2880e828af2a77

Contents?: true

Size: 905 Bytes

Versions: 12

Compression:

Stored size: 905 Bytes

Contents

# frozen_string_literal: true

require 'openssl'
require 'fiber'

ctx = OpenSSL::SSL::SSLContext.new

f = Fiber.new { |peer| loop { p peer: peer; _name, peer = peer.transfer nil } }
ctx.servername_cb = proc { |_socket, name|
  p servername_cb: name
  f.transfer([name, Fiber.current]).tap { |r| p result: r }
}

socket = Socket.new(:INET, :STREAM).tap do |s|
  s.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1)
  s.setsockopt(::Socket::SOL_SOCKET, ::Socket::SO_REUSEPORT, 1)
  s.bind(Socket.sockaddr_in(12345, '0.0.0.0'))
  s.listen(Socket::SOMAXCONN)
end
server = OpenSSL::SSL::SSLServer.new(socket, ctx)

Thread.new do
  sleep 0.5
  socket = TCPSocket.new('127.0.0.1', 12345)
  client = OpenSSL::SSL::SSLSocket.new(socket)
  client.hostname = 'example.com'
  p client: client
  client.connect
rescue => e
  p client_error: e
end

while true
  conn = server.accept
  p accepted: conn
  break
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
tipi-0.55 examples/servername_cb.rb
tipi-0.54 examples/servername_cb.rb
tipi-0.53 examples/servername_cb.rb
tipi-0.52 examples/servername_cb.rb
tipi-0.51 examples/servername_cb.rb
tipi-0.50 examples/servername_cb.rb
tipi-0.49 examples/servername_cb.rb
tipi-0.47 examples/servername_cb.rb
tipi-0.46 examples/servername_cb.rb
tipi-0.45 examples/servername_cb.rb
tipi-0.43 examples/servername_cb.rb
tipi-0.42 examples/servername_cb.rb