Class: Async::IO::SSLServer
- Inherits:
-
Object
- Object
- Async::IO::SSLServer
- Extended by:
- Forwardable
- Includes:
- Server
- Defined in:
- lib/async/io/ssl_socket.rb
Overview
We reimplement this from scratch because the native implementation doesn’t expose the underlying server/context that we need to implement non-blocking accept.
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#server ⇒ Object
readonly
Returns the value of attribute server.
Instance Method Summary collapse
- #accept(task: Task.current, **options) ⇒ Object
- #dup ⇒ Object
-
#initialize(server, context) ⇒ SSLServer
constructor
A new instance of SSLServer.
- #listen(*args) ⇒ Object
Methods included from Server
Constructor Details
#initialize(server, context) ⇒ SSLServer
Returns a new instance of SSLServer.
99 100 101 102 |
# File 'lib/async/io/ssl_socket.rb', line 99 def initialize(server, context) @server = server @context = context end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
111 112 113 |
# File 'lib/async/io/ssl_socket.rb', line 111 def context @context end |
#server ⇒ Object (readonly)
Returns the value of attribute server.
110 111 112 |
# File 'lib/async/io/ssl_socket.rb', line 110 def server @server end |
Instance Method Details
#accept(task: Task.current, **options) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/async/io/ssl_socket.rb', line 117 def accept(task: Task.current, **) peer, address = @server.accept(**) wrapper = SSLSocket.new(peer, @context) return wrapper, address unless block_given? task.async do task.annotate "accepting secure connection #{address.inspect}" begin # You want to do this in a nested async task or you might suffer from head-of-line blocking. wrapper.accept yield wrapper, address ensure wrapper.close end end end |
#dup ⇒ Object
104 105 106 |
# File 'lib/async/io/ssl_socket.rb', line 104 def dup self.class.new(@server.dup, @context) end |
#listen(*args) ⇒ Object
113 114 115 |
# File 'lib/async/io/ssl_socket.rb', line 113 def listen(*args) @server.listen(*args) end |