summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio/selector_events.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/asyncio/selector_events.py')
-rw-r--r--Lib/asyncio/selector_events.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py
index 2a17034..7b364ad 100644
--- a/Lib/asyncio/selector_events.py
+++ b/Lib/asyncio/selector_events.py
@@ -51,8 +51,9 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
server_side, server_hostname, extra, server)
def _make_datagram_transport(self, sock, protocol,
- address=None, extra=None):
- return _SelectorDatagramTransport(self, sock, protocol, address, extra)
+ address=None, waiter=None, extra=None):
+ return _SelectorDatagramTransport(self, sock, protocol,
+ address, waiter, extra)
def close(self):
if self.is_closed():
@@ -481,6 +482,7 @@ class _SelectorSocketTransport(_SelectorTransport):
self._loop.add_reader(self._sock_fd, self._read_ready)
self._loop.call_soon(self._protocol.connection_made, self)
if waiter is not None:
+ # wait until protocol.connection_made() has been called
self._loop.call_soon(waiter._set_result_unless_cancelled, None)
def pause_reading(self):
@@ -690,6 +692,7 @@ class _SelectorSslTransport(_SelectorTransport):
self._loop.add_reader(self._sock_fd, self._read_ready)
self._loop.call_soon(self._protocol.connection_made, self)
if self._waiter is not None:
+ # wait until protocol.connection_made() has been called
self._loop.call_soon(self._waiter._set_result_unless_cancelled,
None)
@@ -806,11 +809,15 @@ class _SelectorDatagramTransport(_SelectorTransport):
_buffer_factory = collections.deque
- def __init__(self, loop, sock, protocol, address=None, extra=None):
+ def __init__(self, loop, sock, protocol, address=None,
+ waiter=None, extra=None):
super().__init__(loop, sock, protocol, extra)
self._address = address
self._loop.add_reader(self._sock_fd, self._read_ready)
self._loop.call_soon(self._protocol.connection_made, self)
+ if waiter is not None:
+ # wait until protocol.connection_made() has been called
+ self._loop.call_soon(waiter._set_result_unless_cancelled, None)
def get_write_buffer_size(self):
return sum(len(data) for data, _ in self._buffer)