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) ⇒ 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.
92 93 94 95 |
# File 'lib/async/io/ssl_socket.rb', line 92 def initialize(server, context) @server = server @context = context end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
100 101 102 |
# File 'lib/async/io/ssl_socket.rb', line 100 def context @context end |
#server ⇒ Object (readonly)
Returns the value of attribute server.
99 100 101 |
# File 'lib/async/io/ssl_socket.rb', line 99 def server @server end |
Instance Method Details
#accept(task: Task.current) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/async/io/ssl_socket.rb', line 106 def accept(task: Task.current) peer, address = @server.accept wrapper = SSLSocket.wrap(peer, @context) return wrapper, address unless block_given? task.async do task.annotate "accepting secure connection #{address}" 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 rescue Async.logger.error(self) {$!} ensure wrapper.close end end end |
#listen(*args) ⇒ Object
102 103 104 |
# File 'lib/async/io/ssl_socket.rb', line 102 def listen(*args) @server.listen(*args) end |