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
- #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.
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.
104 105 106 |
# File 'lib/async/io/ssl_socket.rb', line 104 def context @context end |
#server ⇒ Object (readonly)
Returns the value of attribute server.
103 104 105 |
# File 'lib/async/io/ssl_socket.rb', line 103 def server @server end |
Instance Method Details
#accept(task: Task.current) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/async/io/ssl_socket.rb', line 110 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.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 rescue Async.logger.error(self) {$!} ensure wrapper.close end end end |
#dup ⇒ Object
97 98 99 |
# File 'lib/async/io/ssl_socket.rb', line 97 def dup self.class.new(@server.dup, @context) end |
#listen(*args) ⇒ Object
106 107 108 |
# File 'lib/async/io/ssl_socket.rb', line 106 def listen(*args) @server.listen(*args) end |