MCPcopy Create free account
hub / github.com/rthalley/dnspython / _worker

Method _worker

dns/quic/_sync.py:134–166  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

132 return
133
134 def _worker(self):
135 try:
136 with selectors.DefaultSelector() as sel:
137 sel.register(self._socket, selectors.EVENT_READ, self._read)
138 sel.register(
139 self._receive_wakeup, selectors.EVENT_READ, self._drain_wakeup
140 )
141 while not self._done:
142 (expiration, interval) = self._get_timer_values(False)
143 items = sel.select(interval)
144 for key, _ in items:
145 key.data()
146 with self._lock:
147 self._handle_timer(expiration)
148 self._handle_events()
149 with self._lock:
150 datagrams = self._connection.datagrams_to_send(time.time())
151 for datagram, _ in datagrams:
152 try:
153 self._socket.send(datagram)
154 except BlockingIOError:
155 # we let QUIC handle any lossage
156 pass
157 except Exception:
158 # Eat all exceptions as we have no way to pass them back to the
159 # caller currently. It might be nice to fix this in the future.
160 pass
161 finally:
162 with self._lock:
163 self._done = True
164 self._socket.close()
165 # Ensure anyone waiting for this gets woken up.
166 self._handshake_complete.set()
167
168 def _handle_events(self):
169 while True:

Callers

nothing calls this directly

Calls 6

_handle_eventsMethod · 0.95
_get_timer_valuesMethod · 0.80
_handle_timerMethod · 0.80
timeMethod · 0.80
sendMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected