| 95 | |
| 96 | class SyncQuicConnection(BaseQuicConnection): |
| 97 | def __init__(self, connection, address, port, source, source_port, manager): |
| 98 | super().__init__(connection, address, port, source, source_port, manager) |
| 99 | self._socket = socket_factory(self._af, socket.SOCK_DGRAM, 0) |
| 100 | if self._source is not None: |
| 101 | try: |
| 102 | self._socket.bind( |
| 103 | dns.inet.low_level_address_tuple(self._source, self._af) |
| 104 | ) |
| 105 | except Exception: |
| 106 | self._socket.close() |
| 107 | raise |
| 108 | self._socket.connect(self._peer) |
| 109 | (self._send_wakeup, self._receive_wakeup) = socket.socketpair() |
| 110 | self._receive_wakeup.setblocking(False) |
| 111 | self._socket.setblocking(False) |
| 112 | self._handshake_complete = threading.Event() |
| 113 | self._worker_thread = None |
| 114 | self._lock = threading.Lock() |
| 115 | |
| 116 | def _read(self): |
| 117 | count = 0 |