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
- #fileno ⇒ 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.
93 94 95 96 |
# File 'lib/async/io/ssl_socket.rb', line 93 def initialize(server, context) @server = server @context = context end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
109 110 111 |
# File 'lib/async/io/ssl_socket.rb', line 109 def context @context end |
#server ⇒ Object (readonly)
Returns the value of attribute server.
108 109 110 |
# File 'lib/async/io/ssl_socket.rb', line 108 def server @server end |
Instance Method Details
#accept(task: Task.current, **options) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/async/io/ssl_socket.rb', line 115 def accept(task: Task.current, **) peer, address = @server.accept(**) wrapper = SSLSocket.new(peer, @context) return wrapper, address unless block_given? task.async do |task| 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
102 103 104 |
# File 'lib/async/io/ssl_socket.rb', line 102 def dup self.class.new(@server.dup, @context) end |
#fileno ⇒ Object
98 99 100 |
# File 'lib/async/io/ssl_socket.rb', line 98 def fileno @server.fileno end |
#listen(*args) ⇒ Object
111 112 113 |
# File 'lib/async/io/ssl_socket.rb', line 111 def listen(*args) @server.listen(*args) end |