mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-44011: New asyncio ssl implementation (#17975)
This commit is contained in:
parent
c96cc089f6
commit
5fb06edbbb
12 changed files with 2474 additions and 527 deletions
|
@ -70,11 +70,15 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
self, rawsock, protocol, sslcontext, waiter=None,
|
||||
*, server_side=False, server_hostname=None,
|
||||
extra=None, server=None,
|
||||
ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT):
|
||||
ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT,
|
||||
ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT,
|
||||
):
|
||||
ssl_protocol = sslproto.SSLProtocol(
|
||||
self, protocol, sslcontext, waiter,
|
||||
server_side, server_hostname,
|
||||
ssl_handshake_timeout=ssl_handshake_timeout)
|
||||
self, protocol, sslcontext, waiter,
|
||||
server_side, server_hostname,
|
||||
ssl_handshake_timeout=ssl_handshake_timeout,
|
||||
ssl_shutdown_timeout=ssl_shutdown_timeout
|
||||
)
|
||||
_SelectorSocketTransport(self, rawsock, ssl_protocol,
|
||||
extra=extra, server=server)
|
||||
return ssl_protocol._app_transport
|
||||
|
@ -146,15 +150,17 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
|
||||
def _start_serving(self, protocol_factory, sock,
|
||||
sslcontext=None, server=None, backlog=100,
|
||||
ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT):
|
||||
ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT,
|
||||
ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT):
|
||||
self._add_reader(sock.fileno(), self._accept_connection,
|
||||
protocol_factory, sock, sslcontext, server, backlog,
|
||||
ssl_handshake_timeout)
|
||||
ssl_handshake_timeout, ssl_shutdown_timeout)
|
||||
|
||||
def _accept_connection(
|
||||
self, protocol_factory, sock,
|
||||
sslcontext=None, server=None, backlog=100,
|
||||
ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT):
|
||||
ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT,
|
||||
ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT):
|
||||
# This method is only called once for each event loop tick where the
|
||||
# listening socket has triggered an EVENT_READ. There may be multiple
|
||||
# connections waiting for an .accept() so it is called in a loop.
|
||||
|
@ -185,20 +191,22 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
self.call_later(constants.ACCEPT_RETRY_DELAY,
|
||||
self._start_serving,
|
||||
protocol_factory, sock, sslcontext, server,
|
||||
backlog, ssl_handshake_timeout)
|
||||
backlog, ssl_handshake_timeout,
|
||||
ssl_shutdown_timeout)
|
||||
else:
|
||||
raise # The event loop will catch, log and ignore it.
|
||||
else:
|
||||
extra = {'peername': addr}
|
||||
accept = self._accept_connection2(
|
||||
protocol_factory, conn, extra, sslcontext, server,
|
||||
ssl_handshake_timeout)
|
||||
ssl_handshake_timeout, ssl_shutdown_timeout)
|
||||
self.create_task(accept)
|
||||
|
||||
async def _accept_connection2(
|
||||
self, protocol_factory, conn, extra,
|
||||
sslcontext=None, server=None,
|
||||
ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT):
|
||||
ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT,
|
||||
ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT):
|
||||
protocol = None
|
||||
transport = None
|
||||
try:
|
||||
|
@ -208,7 +216,8 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
transport = self._make_ssl_transport(
|
||||
conn, protocol, sslcontext, waiter=waiter,
|
||||
server_side=True, extra=extra, server=server,
|
||||
ssl_handshake_timeout=ssl_handshake_timeout)
|
||||
ssl_handshake_timeout=ssl_handshake_timeout,
|
||||
ssl_shutdown_timeout=ssl_shutdown_timeout)
|
||||
else:
|
||||
transport = self._make_socket_transport(
|
||||
conn, protocol, waiter=waiter, extra=extra,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue